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


  • 相关阅读:
    Openwrt智能路由系统开发--内容总结
    EdgeX foundry树莓派搭建与MQTT通讯
    C语言学习截图保存
    使用python生成Latex公式语法
    数据结构与算法之排序
    数据结构与算法之常用数据结构
    MySQL数据库规范 (设计规范+开发规范+操作规范)
    动态规划之LIS(最长上升子序列)
    动态规划之区间DP
    动态规划之状态压缩DP
  • 原文地址:https://www.cnblogs.com/chenhaiming/p/9916260.html
Copyright © 2011-2022 走看看