码迷,mamicode.com
首页 > 编程语言 > 详细

多线程中的event,用于多线程的协调

时间:2018-09-22 19:50:09      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:程序   name   targe   mat   ...   top   start   数据   全局变量   

 

 

‘‘‘
简单的需求:红绿灯,红灯停,绿灯行
一个线程扮演红绿灯,每过一段时间灯变化,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,用于多线程的协调

标签:程序   name   targe   mat   ...   top   start   数据   全局变量   

原文地址:https://www.cnblogs.com/staff/p/9690594.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!