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()

转载于:https://www.cnblogs.com/xiangsikai/p/8178862.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值