【发布时间】:2021-04-27 05:48:59
【问题描述】:
当我运行 python 程序(2.7 或 3)时,我导入了一个模块,该模块具有一个初始化一些线程的类。问题是每当主线程中发生未捕获的异常时,主函数就会死掉,但线程会像僵尸一样继续运行,导致 python 进程永远不会死。
在主线程(甚至其他线程)中有任何未捕获的异常以杀死所有地方的所有内容的最佳方法是什么。
由于我经常调用subprocess模块,所以我通常使用threading.Event来帮助干净地退出。但是,未捕获的异常不会触发这些事件。
这是一个线程不会死掉的程序示例......
prog1.py
#!/usr/bin/env python2.7
import threading
import modx1
mod_obj = modx1.Moddy()
raise Exception('DIE UNEXPECTEDLY')
try:
raise Exception('known problem here')
except Exception:
mod_obj.kill_event.set()
modx1.py
#!/usr/bin/env python2.7
import threading
import subprocess
from time import sleep
class Moddy():
def __init__(self):
self.kill_event = threading.Event()
self.my_thread=threading.Thread(target=self.thread_func)
self.my_thread.start()
def thread_func(self):
while not self.kill_event.is_set():
print('thread still going....')
sleep(2)
【问题讨论】:
-
见stackoverflow.com/questions/2564137/…也许守护进程标志是你想要的?
-
我看过了。我不需要守护线程和/或使用事件的一般概念。在那篇文章中没有直接解决我的具体问题。虽然代码本身没有显示它,但我不能使用守护线程,因为我的很多代码中都有所有派生的进程。
对于我在这里接受的答案,我确实看到了解决方案(“threading. main_thread().is_alive()") 在该帖子底部的一个不被接受的答案中。但是,同样,这篇文章不是那个的重复。
标签: python multithreading exception