1. 程式人生 > >python3 多執行緒 (threading) + 鎖 (Lock) + 控制執行緒數量 (Semaphore) 的例項

python3 多執行緒 (threading) + 鎖 (Lock) + 控制執行緒數量 (Semaphore) 的例項

學習記錄: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) #程式執行時長