zoukankan      html  css  js  c++  java
  • 同步对象(Event)

    # 同步对象(Event)
    import threading, time
    
    
    class Boss(threading.Thread):
        def run(self):
            print('Boss:今晚大家都要加班到22:00')
            print(event.isSet())  # False 没有设定标志位
            event.set()  # 设置了标志位,其它event.wait就可以跳过了
            time.sleep(5)
            print('Boss:<22:00>可以下班了')
            print(event.isSet())  # False 这里被工人的线程清空了标志位
            event.set()  # 又设置了标志位,意味告诉工人可以下班了
    
    
    class Worker(threading.Thread):
        def run(self):
            event.wait()  # 等着,当老板event.set了,才可往下执行
            print('Worker:命好苦')
            time.sleep(1)
            event.clear()  # 清除标志位
            event.wait()  # 再等老板event.set
            print('Worker:Ohyeah')
    
    
    if __name__ == '__main__':
        event = threading.Event()  # 创建一个同步对象event,所有线程对象共享一个event
    
        threads = []  # 创建一个线程空列表
        for i in range(5):  # 产生5个Worker类的线程并加入到threads列表中
            threads.append(Worker())
        threads.append(Boss())  # 产生一个Boss类的线程加入到threads列表中
        for t in threads:  # 运行threads列表中的线程,谁先运行是由cpu确定的,因此在Boss类中使用了event.set(),Worker类中只有event.wait()
            t.start()
        for t in threads:  # hreads列表中的线程.join()
            t.join()
    
        print('end...')
  • 相关阅读:
    泛型接口协变和抗变
    泛型类功能
    泛型结构
    using 关键字给类和名称空间指定别名
    sqlite创建数据库问题
    sqlite命令
    必须输入大于0的整数
    最近在看c#本质论和B站上对应这本书的视频
    Linux系统管理笔记
    创建圆形类,其中包括set,get方法
  • 原文地址:https://www.cnblogs.com/dangrui0725/p/9498499.html
Copyright © 2011-2022 走看看