同步对象(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...')

 

posted @ 2018-08-18 20:13  四十不惑的编程之路  阅读(173)  评论(0编辑  收藏  举报