本節內容
- 進程、與線程區別
- python GIL全局解釋器鎖
- 線程
- 語法
- join
- 線程鎖之Lock\Rlock\信號量
- 將線程變爲守護進程
- Event事件
- queue隊列
- 生產者消費者模型
- Queue隊列
- 開發一個線程池
- 進程
ssh
ssh_sftp
SSH密鑰
RSH -非對稱密鑰驗證
公鑰:public key
私鑰: privat key
10.0.0.31 ----鏈接----> 10.0.0.41
私鑰 公鑰
10.0.0.31 生成密鑰對ssh-keygen
進程和線程
線程:(一堆指令)就是os操做系統去調度CPU操做運算的最小單位
進程:一堆資源的集合,不具有執行的屬性,要操做CPU,先必須建立一個線程。--->一個進程最少包含一個線程(主線程)才能執行。。例如qq就是一個進程,
線程四、同一個進程的不一樣線程之間能夠相互交流;兩個進程想交流了必須經過一箇中間代理
五、一個線程能夠控制和操做同一進程中的其餘線程;可是進程只能操做子進程
存儲速度: cpu>內存>文件
一個程序不能訪問另外一個程序:程序就是一個進程,兩個進程之間不可相互訪問
eg. :
一次性啓動50個線程,統一等最後的結果:
解:先建立一個臨時列表,把全部的結果添加進去,而後循環列表
import threading
import time
#1、直接調用
start_time =time.time()
t_obj = []
def run(n):
print("hello",n)
time.sleep(2)
for i in range(50):
t= threading.Thread(target=run, args=("t-%s"%i,))
t.start()
t_obj.append(t)
for t in t_obj:
t.join()
print("t-%s has finished..."%i)
print("cost time : ",time.time()-start_time)
print("well done!!")
threading.current_thread() #查看進程類型
threading.active_count()#查看活動的線程
守護進程(守護線程):依賴與主線程存活,主進程執行完畢,全部的守護線程也跟着結束,程序退出。
gil鎖
用戶鎖
遞歸鎖rlock:多級鎖防鎖死
Semaphore(信號量)
import threading,time
def run(n):
semaphore.acquire()
time.sleep(1)
print("run the thread: %s" %n)
semaphore.release()
if __name__ == "__main__":
semaphore = threading.BoundedSemaphore(5) #最多同時容許5個線程同時運行
for i in range(20):
t =threading.Thread(target=run,args=(i,))
t.start()
while threading.active_count() !=1 :
pass
else:
print("--- all threads done ---")
優勢:一、程序的解耦
二、提升效率