python多线程事件(线程间的通信)
#事件,就是多线程之间的通信
import threading, time
class Boss(threading.Thread):
def run(self):
print("Boss说:从现在开始我们就要996啦,欢呼吧")
#事件设置
print(event.isSet())
event.set() #event被set后,多线程中处在event.wait()后的程序才会被激活执行
time.sleep(3)
print("Boss:大家干完了,就不用996了")
print(event.isSet())
event.set()
class Worker(threading.Thread):
def run(self):
event.wait()
print("Worker:哎呀妈呀,咋还996了呢")
event.clear()
event.wait()
print("Worker:oh yeah......")
if __name__ == "__main__":
event = threading.Event()
threads = []
for i in range(5):
threads.append(Worker())
threads.append(Boss())
for t in threads:
t.start()
#运行上面的程序,可以得到下面的输出
Boss说:从现在开始我们就要996啦,欢呼吧
Worker:哎呀妈呀,咋还996了呢
Worker:哎呀妈呀,咋还996了呢
Worker:哎呀妈呀,咋还996了呢
Worker:哎呀妈呀,咋还996了呢
Worker:哎呀妈呀,咋还996了呢
Boss:大家干完了,就不用996了
Worker:oh yeah......
Worker:oh yeah......
Worker:oh yeah......
Worker:oh yeah......
Worker:oh yeah......
Boss线程首先说话,并通过set对event设置状态,激活处于event.wait后的程序
5个Work线程首先处于wait状态,只有等到event状态被设置后,才会运行后面的程序,运行完后复位event的状态,并再次进入wait状态。