Python events

  • Events不同线程之间同步对象

参数说明:

# 实例化event对象
event = threading.Event()

# 等待检测标志位被设定,标志位设置后就不阻塞了
# 客户机线程可以等待设置标志
event.wait()

# 设置一个全局变量标志位True
event.set()

# 清空全局变量False
event.clear()

 

events模板:

  通过Event来实现两个或多个线程间的交互,下面是一个红绿灯的例子,即起动一个线程做交通指挥灯,生成几个线程做车辆,车辆行驶按红灯停,绿灯行的规则。
  标志位被设定,代表绿灯,直接同行,标志位清空,代表红灯,wait等待变绿等。每一量车都可以等待同一个事件。
  6秒绿灯变红灯,4秒红灯变绿等,事件的连锁变化。
import time,threading

# 生成event实例对象
event = threading.Event()

# 设置红绿灯函数
def lighter():

    # 设置变量0
    count = 0

    # 设置event为True 启动绿灯
    event.set()
    while True:
        # 如果在5以上10一下就成立
        if count >5 and count < 10:
            # 清空event为False,显示红灯
            event.clear()
            print("\033[41;1mThe red light..\033[0m")
        # 如果10以上就成立
        elif count >10:
            # 设置为True 变绿灯
            event.set()
            # 还原为0
            count = 0
        else:
            print("\033[42;1mThe green light..\033[0m")

        # 每次1秒就+1
        time.sleep(1)
        count +=1

# 模拟车量函数
def car(name):
    while True:
        # 测试是否设置了标识位,射了为True,未射False
        if event.is_set():
            print("[%s] running..."%name)
            time.sleep(1)
        else:
            # 为False的时候就是红灯
            print("[%s] sees red light , waiting..."%name)
            # 等待检测标识位,表示位后往下执行
            event.wait()
            print("\033[34;1m[%s] green light is on,start going...\033[0m"%name)

# 生成实例话执行红绿灯线程
light = threading.Thread(target=lighter)
light.start()

# 生成实例话执行车线程
car1 = threading.Thread(target=car,args=("Tesla",))
car1.start()
posted @ 2018-01-02 19:58  kevin.Xiang  阅读(613)  评论(0编辑  收藏  举报