我有许多长时间运行的任务在Python应用程序的后台运行。我把它们都放在了全局QThreadPool
中。当用户退出时,所有这些后台任务都需要停止。
现在,我有以下代码:
app.aboutToQuit.connect(killAllThreads)
def killAllThreads():
QtCore.QThreadPool.globalInstance().waitForDone()
我看到过建议添加一个全局变量,该变量说明应用程序是否应该退出,并让线程自行终止,但这听起来像是一个非常凌乱且笨拙的解决方案。您是否真的建议在后台任务的每一行代码之前添加检查,以确保该应用程序不应该退出?那是我必须添加的数百张支票。
该建议似乎是在假设我的任务很简单和/或涉及复杂的清理工作,但实际上,我却恰恰相反:这些任务涉及数百行代码,每行代码可能要花费几秒钟的时间,但是并不需要清理完全需要完成。
我听说简单地杀死线程将是一个坏主意,因为那样就不能保证它们会正确清理,但是由于不需要清理,这正是我想要做的。此外,可能会出现比赛条件,但是同样,这些任务需要立即停止,因此我真的不在乎它们是否以无效状态结束。
因此,我需要了解以下内容:
QThreadPool
中所有正在运行的线程的列表? 最佳答案
使用守护程序,它们在主线程结束时自动终止
from threading import Thread
t = Thread(target=self.ReadThread)
t.setDaemon(True)