我有一个使用工作线程将类工作卸载到后台的类。该类继承了threading.Thread,因此类本身就是工作线程。它有许多与工作线程通信的功能,包括关闭它。
现在的问题是,有时我在主代码中得到一个异常,程序退出而没有调用worker.shutdown()方法。 Python然后结束主线程并等待工作线程完成,它从来没有。
如何在主线程死亡时终止工作线程?
答案 0 :(得分:1)
可以说更简洁的方法是在您的主代码中添加异常处理,如果发现您认为严重到需要终止程序的异常,请调用worker.shutdown()
。
另一个解决方案是在启动它们之前将worker标记为守护程序线程(参见Hannu的回答)。请注意,这将不合理地终止工人。
来自文档:
守护程序线程在关闭时突然停止。他们的资源(如此 作为打开文件,数据库事务等)可能不会被释放 正常。
答案 1 :(得分:0)
将工作线程设置为守护进程。
f = threading.Thread(.....)
f.daemon = True
f.start()
现在,如果您的主程序因任何原因退出,您的线程将被终止。