python3 多執行緒 (threading) + 鎖 (Lock) + 控制執行緒數量 (Semaphore) 的例項
阿新 • • 發佈:2018-12-15
學習記錄:python3 多執行緒 (threading ) + 鎖 (Lock) + 控制執行緒數量 (Semaphore) 的例項
import threading import time def sub(num): global count with sem: #鎖定執行緒的最大數量 lock.acquire() #上鎖,第一個執行緒如果申請到鎖,會在執行公共資料的過程中持續阻塞後續執行緒 #即後續第二個或其他執行緒依次來了發現已經被上鎖,只能等待第一個執行緒釋放鎖 #當第一個執行緒將鎖釋放,後續的執行緒會進行爭搶 '''執行緒的公共資料 下''' print(num) temp=count time.sleep(0.001) #模擬大量的io操作 count=temp+1 '''執行緒的公共資料 上''' lock.release() #釋放鎖 time.sleep(2) start = time.time() #記錄程式開始時間 sem=threading.Semaphore(4) #限制執行緒的最大數量為4個 count=0 lock=threading.Lock() #將鎖內的程式碼序列化 l=[] for i in range(100): t=threading.Thread(target=sub,args=('123',)) t.start() l.append(t) for t in l: t.join() print(count) end = time.time() #記錄程式結束時間 print(end-start) #程式執行時長