python 线程的暂停, 恢复
时间: 2023-11-06 19:17:17 浏览: 79
在 Python 中,可以使用 `threading` 模块来创建和管理线程。要暂停和恢复线程的执行,可以使用 `threading.Event` 对象来实现。`Event` 对象有两个方法 `set()` 和 `clear()`,分别用于设置和清除标志位,可以通过 `wait()` 方法来阻塞线程,直到标志位被设置。
以下是示例代码:
```python
import threading
import time
# 创建 Event 对象
pause_event = threading.Event()
def worker():
while True:
# 等待标志位被设置
pause_event.wait()
print("Working...")
time.sleep(1)
# 创建线程并启动
t = threading.Thread(target=worker)
t.start()
while True:
cmd = input("Enter command (pause/resume/exit): ")
if cmd == "pause":
# 清除标志位,暂停线程
pause_event.clear()
print("Thread paused.")
elif cmd == "resume":
# 设置标志位,恢复线程
pause_event.set()
print("Thread resumed.")
elif cmd == "exit":
# 结束线程并退出程序
t.join()
break
```
在上面的代码中,我们创建了一个 `worker` 函数,用于模拟线程的工作。在工作循环中,我们使用 `pause_event.wait()` 方法来等待标志位被设置,如果标志位被清除,则线程会被暂停。
在主线程中,我们使用一个无限循环来读取用户输入的命令,并根据命令设置或清除标志位。如果输入 "pause",则清除标志位,暂停线程;如果输入 "resume",则设置标志位,恢复线程;如果输入 "exit",则结束线程并退出程序。
需要注意的是,在线程被暂停时,可能会导致资源没有被正确释放。因此,在实际应用中,需要根据具体情况选择合适的暂停方式。
阅读全文