在完成所有Python单元测试后拆除所有打开的线程

时间:2018-06-15 07:17:45

标签: python multithreading testing

this thread详细讨论了为什么杀死线程不是一个好主意。当我们谈论实际计划时,我同意。 我正在编写几个组件的单元测试以及它们之间的一些集成测试。有些需要线程化。当测试失败时,一些线程保持打开状态,锁定在队列的.get()调用中。这会导致整个测试套件卡住而不完整。我正在运行ptw(pytest watch)或带有inotifywait的自定义pytest循环来监视我的文件中的更改以重新运行套件。

当所有测试都完成后,我希望套件杀死任何剩余的线程以完成循环,而不是因为测试失败而停留在刚刚打开的某个线程上。这可能吗?

1 个答案:

答案 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

然后它们将在主线程终止时终止。