同步对象(Event)

Posted dangrui0725

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同步对象(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...)

 

以上是关于同步对象(Event)的主要内容,如果未能解决你的问题,请参考以下文章

同步对象 队列 生产者消费者模式

多线程 同步对象 event 简单实例

ReleaseMutex:从非同步代码块调用对象同步方法

同步条件

python基础 - 同步条件Event

three.js 正交相机对象拾取