(15)线程---Condition条件

 
功能:也是通过阻塞控制线程数量.类似信号量进程池线程池的作用

语法: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
View Code

执行结果:程序只有放行完才会结束,不然会一直在阻塞状态

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
View Code

 

原文地址:https://www.cnblogs.com/lyj910313/p/10787336.html