在线程退出之前做某事

时间:2018-05-24 11:12:58

标签: python multithreading

我有一个使用工作线程将类工作卸载到后台的类。该类继承了threading.Thread,因此类本身就是工作线程。它有许多与工作线程通信的功能,包括关闭它。

现在的问题是,有时我在主代码中得到一个异常,程序退出而没有调用worker.shutdown()方法。 Python然后结束主线程并等待工作线程完成,它从来没有。

如何在主线程死亡时终止工作线程?

2 个答案:

答案 0 :(得分:1)

可以说更简洁的方法是在您的主代码中添加异常处理,如果发现您认为严重到需要终止程序的异常,请调用worker.shutdown()

另一个解决方案是在启动它们之前将worker标记为守护程序线程(参见Hannu的回答)。请注意,这将不合理地终止工人。

来自文档:

  

守护程序线程在关闭时突然停止。他们的资源(如此   作为打开文件,数据库事务等)可能不会被释放   正常。

答案 1 :(得分:0)

将工作线程设置为守护进程。

f = threading.Thread(.....)
f.daemon = True
f.start()

现在,如果您的主程序因任何原因退出,您的线程将被终止。