event可以理解为一个标志位,运用于多线程之间的交互。
当设置了event,wait可以通过,
当没有设置event,wait阻塞
一个简单的红灯停绿灯行的程序:
import threading import time event = threading.Event() mutex = threading.Lock() #红绿灯 def light(): counter = 1 while True: #不加锁的话不同线程的输出有时会打印在同一行上 mutex.acquire() if counter <= 5: event.set() counter+=1 print("绿灯") mutex.release() time.sleep(1) elif counter > 5 and counter <= 20: event.clear() counter+=1 print("红灯") mutex.release() time.sleep(1) else: counter = 1 mutex.release() def car(name): while True: mutex.acquire() if event.is_set(): print("car%d通过" %name) mutex.release() time.sleep(2) else: print("car%d等绿灯" %name) mutex.release() event.wait() l = threading.Thread(target = light) l.start() for i in range(5): c = threading.Thread(target= car,args = (i,)) c.start()
原文:https://www.cnblogs.com/Hexdecimal/p/9409227.html