Python 过程不';关闭时不结束

Python 过程不';关闭时不结束,python,tkinter,Python,Tkinter,我用Python构建了一个web scraper应用程序。它由三个主要部分组成: GUI(基于tkinter构建) 客户端(控制前端和后端之间的接口) 后端代码(各种线程进程) 我遇到的问题是,当用户点击X退出程序而不是通过界面退出时,似乎永远不会调用root.destroy(),应用程序永远运行,即使窗口确实消失了。这最终会消耗大量的系统资源 我曾尝试将所有线程设置为守护进程,但没有多大成功。程序退出后继续消耗CPU还有其他原因吗?您不想将所有线程设置为守护进程。您希望将客户端线程和后端线程设

我用Python构建了一个web scraper应用程序。它由三个主要部分组成:

  • GUI(基于tkinter构建)
  • 客户端(控制前端和后端之间的接口)
  • 后端代码(各种线程进程)
  • 我遇到的问题是,当用户点击X退出程序而不是通过界面退出时,似乎永远不会调用root.destroy(),应用程序永远运行,即使窗口确实消失了。这最终会消耗大量的系统资源

    我曾尝试将所有线程设置为守护进程,但没有多大成功。程序退出后继续消耗CPU还有其他原因吗?

    您不想将所有线程设置为
    守护进程。您希望将客户端线程和后端线程设置为守护进程。这样,当GUI线程死亡时,
    daemon
    设置为
    True
    的线程也会结束

    从:

    线程可以标记为“守护线程”。此标志的意义在于,当只剩下守护进程线程时,整个Python程序将退出


    您的程序是多线程的。当一个线程结束(gui)时,其他线程是否可能继续运行?因此。。。GUI线程不应设置为守护进程?子线程呢?后端线程产生许多子线程。我可以将父线程设置为daemon吗,或者这些都应该是daemon吗?@AdrianLarson是的,这就是我要说的。一种简单的方法是将每个线程设置为一个守护进程线程,GUI除外。这包括由后端线程生成的所有子线程。是的,我只是需要将它们全部搜索出来。包中有相当多的模块,所以谢天谢地,我一直在使用from threading import Thread,它很容易替换为:from..package.sub import DaemonThread作为线程,使所有生成的线程都是守护线程。