事件(event)
- 事件是不同线程之间的同步对象
- enent可以通过设置、等待、清除一个标识(flag),来进行线程间的控制
- 线程可以通过获取这个标志位(flag)的状态(设置或未设置)来控制线程
- 事件其实就相当于一个全局变量(设置为True,未设置为False),线程通过这个全局变量的状态来控制自身
event只要set,clear,wait三个方法
- 使用前先实例化event = threading.Event()
- event.wait()#线程阻塞,等待标志位被设置
- event.set()#设置标志位
- event.clear()#清除标志位
红绿灯事件模型
import threading
import time,random
event = threading.Event()
#set为绿灯,clear为红灯
def light():
count = 0
if not event.isSet():
event.set()#设置初始状态为绿灯
while True:
if count <10:
#绿灯
print(' 33[1;42;1m绿灯-可以通行 %s 33[0m'%count)
event.set()
elif count <13:
#黄灯
print(' 33[1;43;1m黄灯 %s 33[0m' % count)
elif count <25:
#红灯
print(' 33[1;41;1m红灯-禁止通行 %s 33[0m' % count)
event.clear()
else:
count = 0
event.set()
count +=1
time.sleep(1)
def car(n):
while True:
time.sleep(1)#random.randrange(3)
if event.isSet():#绿灯状态
print('car[%s] is running...'%str(n))
#event.wait()
else:
print('car[%s] is waitting ...'%str(n))
event.wait()#阻塞等待标志位被设定
def main():
t_light = threading.Thread(target=light)
t_light.start()
for i in range(3):
t_car = threading.Thread(target=car,args=(i,))
t_car.start()
main()