多线程中的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,用于多线程的协调的主要内容,如果未能解决你的问题,请参考以下文章

Python开发基础--- Event对象队列和多进程基础

第54天:Python 多线程 Event

第54天:Python 多线程 Event

事件对象

秒杀多线程第六篇 经典线程同步 事件Event

Python开发基础-Day31 Event对象队列和多进程基础