python之迭代鎖與訊號量
阿新 • • 發佈:2018-12-31
如果現在需要在多處加鎖大於等於2的時候 因為計算機比較笨,當他鎖上一把鎖的時候又所理一把鎖,等他來開鎖的時候他不知道用哪把鑰匙來開鎖,
所以這個時候我們需要把把平常的鎖變為迭代鎖
eg:
import threading import time local = threading.RLock() # 迭代加鎖首先生成例項 def run(name): global num local.acquire() # 上鎖 num += 1 run2(num) local.release() # 解鎖 print(threading.active_count())def run2(num): local.acquire() num += 1 run3(num) local.release() def run3(num): local.acquire() num+=1 local.release() num = 0 py_res = [] for i in range(50): t = threading.Thread(target=run,args=('t%s'%i,)) py_res.append(t) t.start() for i in py_res: i.join()print("num : %s"% num)
型號量可以控制同線程的個數,和鎖的用法一樣
import threading import time senm = threading.BoundedSemaphore(5) def run(num): senm.acquire() # 上鎖 time.sleep(2) print('run the thread %s' % num) senm.release() # 解鎖 for i in range(50): t = threading.Thread(target=run, args=('%s' % i,)) t.start() print(threading.active_count()) while threading.active_count() != 1: pass else: print('is done')