多线程中的event,用于多线程的协调
Posted staff
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程中的event,用于多线程的协调相关的知识,希望对你有一定的参考价值。
‘‘‘ 简单的需求:红绿灯,红灯停,绿灯行 一个线程扮演红绿灯,每过一段时间灯变化,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 < count < 10: 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()
以上是关于多线程中的event,用于多线程的协调的主要内容,如果未能解决你的问题,请参考以下文章