this thread详细讨论了为什么杀死线程不是一个好主意。当我们谈论实际计划时,我同意。
我正在编写几个组件的单元测试以及它们之间的一些集成测试。有些需要线程化。当测试失败时,一些线程保持打开状态,锁定在队列的.get()
调用中。这会导致整个测试套件卡住而不完整。我正在运行ptw
(pytest watch)或带有inotifywait
的自定义pytest循环来监视我的文件中的更改以重新运行套件。
当所有测试都完成后,我希望套件杀死任何剩余的线程以完成循环,而不是因为测试失败而停留在刚刚打开的某个线程上。这可能吗?
答案 0 :(得分:1)
没有优雅的方法来停止某个帖子,但您可以将daemon
设置为True
。
代码段:
import threading
all_child_threads = [thread for thread in threading.enumerate() if thread != threading.main_thread()]
for thread in all_child_threads:
thread.daemon = True
然后它们将在主线程终止时终止。