功能:也是通过阻塞控制线程数量.类似信号量进程池线程池的作用
语法:wait
from threading import Condition
con= Condition()
conn.acquire()
conn.wait() 也可以传参指定等待时间,不传参相当于阻塞,根据notify数量放行
wait下面写上相应逻辑代码
con.release()
#语法: notify 使用前后加阻塞
con.acquire()
con.notify(5) 括号内自定义线程放行的数量,默认放行1个
con.release()
例:
from threading import Condition,Thread import time def func(con,index): print("%s在等待" % index) con.acquire() # 添加阻塞 con.wait() print("%s do everyting" % index) con.release() con = Condition() for i in range(10): t = Thread(target=func,args = (con,i)) t.start() # 写法一:传参数指定放行个数 con.acquire() con.notify(5) # 不加参数(默认放行1个) con.release() # 写法二:动态输入放行个数 # count = 10 # while count > 0: # num = int(input(">>> ")) # con.acquire() # # 放行线程 num 动态赋予的值 # con.notify(num) # con.release() # count -= num
执行结果:程序只有放行完才会结束,不然会一直在阻塞状态
0在等待 1在等待 2在等待 3在等待 4在等待 5在等待 6在等待 7在等待 8在等待 9在等待 1 do everyting 2 do everyting 4 do everyting 0 do everyting 3 do everyting