关闭窗口时结束所有threading.Thread线程的示例
时间: 2023-08-24 13:08:06 浏览: 106
c# 结束进程例子
可以使用 Python 的 `atexit` 模块来注册一个函数,在程序退出时自动执行。在这个函数中,可以遍历当前所有的线程并逐个调用它们的 `join()` 方法来等待它们结束。
以下是一个示例代码:
```python
import threading
import atexit
# 定义一个线程类
class MyThread(threading.Thread):
def run(self):
print("线程开始:", self.name)
# 模拟线程执行
for i in range(5):
print(self.name, "执行中...")
print("线程结束:", self.name)
# 在程序退出时调用的函数
def exit_handler():
print("程序退出,等待所有线程结束...")
# 遍历所有线程,逐个调用 join() 方法等待它们结束
for thread in threading.enumerate():
if thread != threading.current_thread():
thread.join()
print("所有线程已结束!")
# 注册程序退出时的函数
atexit.register(exit_handler)
# 启动多个线程
for i in range(3):
t = MyThread()
t.start()
print("主线程结束!")
```
在这个示例中,我们定义了一个 `MyThread` 类来模拟线程的执行。程序启动后,会启动 3 个 `MyThread` 实例,并且在程序退出时会等待它们全部结束。在 `exit_handler` 函数中,我们使用了 `threading.enumerate()` 方法来获取当前所有的线程实例,并且逐个调用它们的 `join()` 方法来等待它们结束。注意要判断当前线程是否是主线程,避免等待自己。
阅读全文