• python多线程系列—Event对象(六)


    一、Event对象

    1、threading.Event 事件对象 用于线程之间的简单通信,一个线程发出事件信号,其他线程等待该信号。
    1、Event对象set()方法可以设置Event对象内部的信号标志为True,并通知所有处于等待阻塞状态的线程恢复运行状态
    2、Event对象clear()方法可以清除Event对象内部信号标识,将其设置为False
    3、Event的isSet()方法用来判断内部信号的标识状态
    4、Event对象的wait()方法只有在内部信号状态为True时很快的执行并返回
    5、Event对象内部信号标识为False,wait()方法将阻塞线程一致等待至超时,或者内部信号为真才返回

    二、代码演示

    信号标识为False,线程进入等待状,等到下一个线程将信号标识修改为True,等待的线程将恢复执行

    import threading
    class Demo(threading.Thread):
        def __init__(self,my_event):
            super().__init__()
            self.lock = threading.Lock()
            #event事件
            self.my_event = my_event
    
        def run(self) -> None:
            #这要加锁,避免2个线程同时修改信号标识的情况,加了锁就变成了单线程了
            # 获取线程名称
            thread_name = self.getName()
            with self.lock:
                if self.my_event.isSet():
                    #如果信号标识是True,则将信号标识改为False
                    self.my_event.clear()
                    print(f"运动员{thread_name}等待起跑命令")
                    self.my_event.wait()
                    print(f"运动员{thread_name}收到起跑命令,开始跑步")
                else:
                    #如果信号标识为False,则将信号标识设置为True
                    self.my_event.set()
                    print(f"运动员{thread_name}无需等待,开始跑步")
    
    if __name__ == '__main__':
        my_event = threading.Event()
        #设置初始值
        my_event.set()
        for i in range(20):
            th = Demo(my_event=my_event)
            th.start()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    vue 中 asstes 和 static 有什么联系与区别
    Ubuntu22.04本地部署PaddleSpeech实验代码(GPU版)
    面试官:如何打破双亲委派机制?
    chrome插件:instagram粉丝列表追踪
    云原生学习的最佳路径
    阿桂天山的技术小结:Sqlalchemy+pyodbc连接MSSQL server测试
    既然有HTTP协议,为什么还要有RPC
    海思SD3403,SS928/926,hi3519dv500,hi3516dv500移植yolov7(1)
    trivy【3】自定义扫描策略
    java--包
  • 原文地址:https://blog.csdn.net/weixin_54542209/article/details/126226128