多线程中的event,用于多线程的协调
2021-06-19 11:03
标签:程序 name targe mat ... top start 数据 全局变量 多线程中的event,用于多线程的协调 标签:程序 name targe mat ... top start 数据 全局变量 原文地址:https://www.cnblogs.com/staff/p/9690594.html‘‘‘
简单的需求:红绿灯,红灯停,绿灯行
一个线程扮演红绿灯,每过一段时间灯变化,3-5个线程扮演车,红灯停,绿灯行
红绿灯线程和车的线程会相互依赖
这种场景怎么实现?---事件
切换一次灯就是一次事件,这次事件的变化造成其他状态的变化
事件是用于线程之间的数据同步的。事件变化其他线程相应作出变化
应该设置一个全局变量当做灯,车的线程监测全局变量。
事件就是封装的一个全局变量
event = threading.event()
event.set() 设置标志位,该状态下程序激活,“绿灯”
event.clear() 清空标志位,该状态下程序阻塞,“红灯”
event.wait() 一直监测标志位。如果标志位没被设置就阻塞(红灯),标志位一设置就激活(绿灯)
event.is_set() 判断标志位是否被设定
‘‘‘
import time
import threading
event = threading.Event()
def lighter():
count = 0
event.set() # 刚进来的时候是绿灯
while True:
if 4 :
event.clear()
print("[信号灯]:红,不能通行")
elif count >= 10:
event.set()
count = 0
else:
event.set()
print("[信号灯]:绿,可以通行")
time.sleep(1)
count += 1
def car(name):
while True:
if event.is_set():
print("{0}: green , running...".format(name))
time.sleep(1)
else:
print("{0}: RED , STOP...".format(name))
event.wait()
print("{0}: 绿灯亮了 , 继续前进...".format(name))
light = threading.Thread(target=lighter,)
light.start()
car1 = threading.Thread(target=car, args=("HONDA",))
car1.start()