zoukankan      html  css  js  c++  java
  • 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("33[41;1mThe red light..33[0m")
            # 如果10以上就成立
            elif count >10:
                # 设置为True 变绿灯
                event.set()
                # 还原为0
                count = 0
            else:
                print("33[42;1mThe green light..33[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("33[34;1m[%s] green light is on,start going...33[0m"%name)
    
    # 生成实例话执行红绿灯线程
    light = threading.Thread(target=lighter)
    light.start()
    
    # 生成实例话执行车线程
    car1 = threading.Thread(target=car,args=("Tesla",))
    car1.start()
  • 相关阅读:
    怎样处理人际关系中的矛盾
    如何处理人际关系
    Python包含以下函数:
    与他人有效沟通的小技巧
    沟通时容易出现的问题
    如何在工作中提升自己
    第十三周进度报告
    第十二周学习进度
    团队绩效管理
    软件对标分析
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/8178862.html
Copyright © 2011-2022 走看看