zoukankan      html  css  js  c++  java
  • PYTHON——多线程:同步条件(Event)

    条件同步和条件变量(condition)同步差不多意思,只是少了锁功能,因为条件同步设计于不访问共享资源的条件环境。

    event围绕一个标志位在搞。

    event=threading.Event():条件环境对象,初始值 为False;
    event.isSet():返回event的状态值;
    event.wait():如果 event.isSet()==False将阻塞线程;
    event.set(): 设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度;
    event.clear():恢复event的状态值为False。

    实例代码:

    import threading,time
    class Boss(threading.Thread):
        def run(self):
            print("BOSS:今晚大家都要加班到22:00。")
            # event.isSet() or event.set()
            if event.isSet:
                event.set()
            time.sleep(5)
            print("BOSS:<22:00>可以下班了。")
            # event.isSet() or event.set()
            if event.isSet:
                event.set()
    class Worker(threading.Thread):
        def run(self):
            event.wait()
            print("Worker:哎……命苦啊!")
            time.sleep(1)
            event.clear()
            event.wait()
            print("Worker:OhYeah!")
    if __name__=="__main__":
        event=threading.Event()  #不是锁了,是一个事件。
        threads=[]
        for i in range(5):
            threads.append(Worker())
        threads.append(Boss())
        for t in threads:
            t.start()
        for t in threads:
            t.join()

    实行结果:

    BOSS:今晚大家都要加班到22:00。
    Worker:哎……命苦啊!
    Worker:哎……命苦啊!
    Worker:哎……命苦啊!
    Worker:哎……命苦啊!
    Worker:哎……命苦啊!
    BOSS:<22:00>可以下班了。
    Worker:OhYeah!
    Worker:OhYeah!
    Worker:OhYeah!
    Worker:OhYeah!
    Worker:OhYeah!
    
    Process finished with exit code 0


  • 相关阅读:
    nginx js、css多个请求合并为一个请求(concat模块)
    Web客户端语言HTML、XHTML和XML相关知识介绍
    正则小略
    你可能不知道的5个功能强大的 HTML5 API
    你须知道的30个CSS选择器 »
    css3 media媒体查询器用法总结
    深入java虚拟机学习 -- 类的加载机制
    ElasticSearch和solr的差别
    idea 使用debugger技巧
    vue学习问题总结(一)
  • 原文地址:https://www.cnblogs.com/chenhaiming/p/9916260.html
Copyright © 2011-2022 走看看