首页 > 解决方案 > 在线程退出之前做某事

问题描述

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

现在的问题是,有时我在主代码中遇到异常并且程序退出而没有调用 worker.shutdown() 方法。然后 Python 结束主线程并等待工作线程完成,但它永远不会这样做。

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

标签: pythonmultithreading

解决方案


可以说更干净的方法是在您的主代码中添加异常处理,并worker.shutdown()在捕获到您认为严重到足以保证程序终止的异常时调用。

另一种解决方案是在启动它们之前将工作者标记为守护线程(参见 Hannu 的回答)。请注意,这将不礼貌地终止工作人员。

从文档:

守护程序线程在关闭时突然停止。它们的资源(如打开的文件、数据库事务等)可能无法正常释放。


推荐阅读