#事件,就是多线程之间的通信
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状态。