event.wait() 等待一定时间,或者当遇到event.set() 时,继续执行
event.clear() 清除信号
event.set() 设置信号
event.isset() 判断信号
例一: 红绿灯
#event 实现两个线程之间的交互 import time, threading def lighter(): if not event.is_set(): event.set() count = 0 while True: if count<10: print('the green light is run %s'%count) elif count<15: print('the yellow light is run %s'%count) elif count<20: print('the red light is run %s'%count) event.clear() else: count = 0 event.set() time.sleep(1) count += 1 def cars(n): while True: if event.is_set(): print('%s is running'%n) else: print('%s is stoping'%n) time.sleep(1) event = threading.Event() light = threading.Thread(target=lighter, args=()) light.start() car = threading.Thread(target=cars, args=('tesl', )) car.start() 例二 开关门
import threading, time, random def door(): door_count_number = 0 while True: if door_state.is_set(): print('the door is open') door_count_number += 1 else: print('the door has been closed') door_count_number = 0 door_state.wait() if door_count_number > 3: door_state.clear() time.sleep(0.5) def staff(n): print('%s is comming'%n) while True: if door_state.is_set(): print('%s is pass'%n) break else : door_state.set() print('staff[%s]sees door got closed, swipped the card') time.sleep(0.5) door_state = threading.Event() Door = threading.Thread(target=door) Door.start() for i in range(5): p = threading.Thread(target=staff, args=(i, )) time.sleep(random.randrange(3)) p.start()