当QThread()停止运行(Python)时,是否需要手动调用.quit()方法?

时间:2012-11-14 09:52:27

标签: python multithreading qt thread-safety qthread

我正在编写一个利用QThreads的多线程应用程序。我知道,为了启动一个线程,我需要覆盖run()方法并在某处使用thread.start()调用该方法(就我的情况而言,在我的GUI线程中)。

我想知道,是否需要在任何地方调用.wait()方法,并且我应该在线程完成后调用.quit(),还是自动完成?

我正在使用PySide。

由于

1 个答案:

答案 0 :(得分:1)

这两个答案都取决于您的代码正在做什么以及您对该线程的期望。

如果您使用该线程的逻辑需要在QThread结束时同步等待,那么是的,您需要调用wait()。然而,除了应用程序启动和关闭等非常具体的情况之外,这种要求是草率线程模型的标志。使用QThread::wait()表示蠕动顺序操作,这意味着您实际上并没有同时使用线程。

quit()退出QThread内部事件循环,这不是必须使用的。长时间运行的线程(与单任务工作者相对)必须具有某种类型的事件循环 - 这是一个通用语句,不是特定于QThread的。您可以自己完成(以某个while(keepRunning) { }周期的形式)或使用Qt提供的事件循环,您可以通过在exec()方法中调用run()来启动它。您之前的实现是可以完成的,因为您确实提供了keepRunning条件。 Qt提供的实现对你来说是隐藏的,这里是quit()调用 - 它内部只是在Qt中设置某种类似的标志。