day51-线程-条件

#条件:Condition、notify通知、notify_all、wait
#条件 = 递归锁 + wait功能
#条件可以让主线程控制多少个子线程可以执行。
import threading
def play(con,i):
    con.acquire()  #所有人都拿到了钥匙
    con.wait()     #排队玩游戏,等待工作人员放行,收到notify发过来的信号之后就不再阻塞。
    print('游客%s可以玩游戏了'%i)
    con.release()

con = threading.Condition() #条件对象
for i in range(10):         #有十个游客
    t = threading.Thread(target=play,args=(con,i))
    t.start()

while True:
    inp = input('放行人数:') #工作人员每次可以放行多少个人
    if inp == 'q':break
    con.acquire()            #工作人员拿到钥匙
    con.notify(int(inp))     #发出通知信号:通知放行多少个人,notify后面必须跟int类型。
    con.release()

#notify_all:放行所有线程
# while True:
#     inp = input('放行人数:')
#     if inp == 'q':break
#     con.acquire()
#     if inp == 'all':
#         con.notify_all() #放行所有人
#     else:
#         con.notify(int(inp))
#     con.release()
原文地址:https://www.cnblogs.com/python-daxiong/p/12142806.html