python3使用event
时间: 2024-09-06 15:03:28 浏览: 42
在Python 3中,事件(Event)是 threading 模块中的一个同步原语,用于在多线程编程中提供一种简单的通信机制。它允许一个线程告诉其他线程某些事情已经发生,从而协调线程间的操作。
Event 对象包含一个内部标志,初始状态为 False。通过调用 Event 的 set() 方法可以将其设置为 True,调用 clear() 方法可以将其重置为 False。wait() 方法是阻塞的,它会挂起调用它的线程,直到内部标志为 True。如果在调用 wait() 时标志已经为 True,则线程不会阻塞,而是继续执行。
这里是一个简单的使用 Event 的例子:
```python
import threading
import time
# 创建一个 Event 对象
event = threading.Event()
def wait_for_event(e):
"""等待直到 event 被设置"""
print("wait_for_event: 我正在等待事件")
e.wait() # 等待事件
print("wait_for_event: 事件发生了!")
def wait_for_event_timeout(e, t):
"""等待直到 event 被设置,或者超时"""
print("wait_for_event_timeout: 我正在等待事件")
e.wait(t) # 等待事件
print("wait_for_event_timeout: 事件发生了或者超时了")
# 启动一个线程,它在事件上等待
thread = threading.Thread(name="block",
target=wait_for_event,
args=(event,))
thread.start()
# 给线程一点时间来运行
time.sleep(2)
print("main: 我现在设置事件")
event.set() # 设置事件,释放等待的线程
# 再启动一个线程,它在事件上等待,但有超时限制
thread = threading.Thread(name="block",
target=wait_for_event_timeout,
args=(event, 1))
thread.start()
thread.join()
print("main: 事件被设置了,线程应该被释放了")
```
在这个例子中,我们创建了一个 Event 对象并启动了两个线程,一个会无限期等待事件被触发,另一个会在超时之前等待事件被触发。
阅读全文