我有许多长时间运行的任务在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)
    

    10-08 08:21