当UI关闭时,PyQT应用程序挂起

时间:2014-05-23 02:32:06

标签: python multithreading pyqt

我在尝试关闭我的应用程序时遇到了麻烦。截至目前,我的应用程序当前生成并运行在while循环中的线程(而True循环),而我的主线程初始化并在PyQT中运行UI。

def main():

    group_size = 8 
    buffer_size = 4 
    app = QtGui.QApplication(sys.argv)
    dgui = DirectGui(group_size, buffer_size)
    engine = KCluster_Engine(group_size, buffer_size)
    dgui.set_engine_ref(engine)
    engine.assign_interface(dgui)
    thread = Thread(target = engine.start)
    thread.start()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

当我在PyQT中关闭应用程序的主窗口时,即使使用ctrl-c,也无法停止在shell中生成python脚本的命令。

处理此行为的最佳方法是什么?当我关闭我的应用程序时,我也希望生成的线程停止,加入并退出此过程。我该怎么做?

2 个答案:

答案 0 :(得分:2)

根据Python标准库,您有两种方法可以杀死您的线程:

  • 要么让它成为守护进程(thread.daemaon = True)而且它会在没有任何正确清洁的情况下被杀死
  • 或者您使用的信号方法如Event,您在线程中的适当位置进行测试

但我认为你应该在SO中查看这个较旧的(但仍然是现实......)问题:Is there any way to kill a Thread in Python?

所有这些都假设app.exec_()在主线程中正确返回。

答案 1 :(得分:1)

如果您使线程守护进程,它将在您退出应用程序后停止。 在启动之前放置thread.daemon = True(如果在调用start之后执行它将引发异常)。它应该可以与线程模块中的线程一起使用。