python多线程之Event机制笔记
- 互联网
- 2025-09-16 05:51:01

Event 事件 笔记 1. 基本概念
threading.Event 是 Python 线程同步的基础组件,本质是一个布尔标志位,提供跨线程的事件通知机制。
2. 核心方法 方法作用描述set()设置事件为 True,唤醒所有等待线程clear()重置事件为 Falsewait(timeout=None)阻塞直到事件被设置或超时(返回是否等到事件)is_set()返回当前事件状态 3. 注意事项 避免死锁:确保至少有一个线程会调用 set(),否则 wait() 会永久阻塞超时机制:建议使用 wait(timeout=5) 防止意外阻塞 python event.wait(timeout=5.0) 状态管理:set() 后状态保持,除非 clear()如需要更复杂的线程协调时,建议结合 threading.Condition 使用。
4. 演示下面使用一个短跑比赛简单案例来演示一下,如何使用
from threading import Thread,Event from queue import Queue class Runner(Thread): # 初始化对象 def __init__(self, event, name,queue): super().__init__() self.event = event self.name = name self.queue = queue def run(self): # 获取当前线程的名称 print(f"运动员:{self.name},准备好了", ) # 等待事件 self.event.wait() # 结束,将名次放入队列 self.queue.put(self.name) print(f"运动员:{self.name} 到达终点") if __name__ == '__main__': # 创建一个事件 event = Event() # 运动员名单列表 runnerName = ["张三","李四","王五","赵六","孙七"] # 创建一个队列,用于记录名次 queue = Queue(5) # 记录线程列表 threadList = [] #判断状态,如果为True,则设置为False if event.isSet(): event.clear() # 创建运动员线程 [threadList.append(Runner(event,name,queue)) for name in runnerName] # 启动线程 [t.start() for t in threadList] # 接受指令 while True: # 接受裁判指令 key = input("输入跑指令: ") if key == "跑": # 设置事件,唤醒所有等待的运动员线程 event.set() break else: print("指令不对,请重新下发") # 判断队列是否满,也就是运动员是否全部到达终点 while not queue.full(): pass # 公布名次 number = 1 # 因为队列是先进先出,所以从队首依次取值,就是运动名次 while not queue.empty(): print(f"运动员:{queue.get()},排名第{number}名") number += 1输出:
运动员:张三,准备好了 运动员:李四,准备好了 运动员:王五,准备好了 运动员:赵六,准备好了 运动员:孙七,准备好了 输入跑指令: 跑 运动员:张三 到达终点 运动员:王五 到达终点 运动员:赵六 到达终点 运动员:李四 到达终点 运动员:孙七 到达终点 运动员:张三,排名第1名 运动员:王五,排名第2名 运动员:赵六,排名第3名 运动员:李四,排名第4名 运动员:孙七,排名第5名python多线程之Event机制笔记由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“python多线程之Event机制笔记”