python之迭代锁与信号量
Posted 晴晴小可爱的小弟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之迭代锁与信号量相关的知识,希望对你有一定的参考价值。
如果现在需要在多处加锁大于等于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‘)
以上是关于python之迭代锁与信号量的主要内容,如果未能解决你的问题,请参考以下文章
python并发编程之多进程1------互斥锁与进程间的通信