我正在尝试在完成处理后退出一个线程。我正在使用moveToThread。我试图通过调用插槽中的self.thread.quit()从主线程退出工作线程。这不起作用。
我找到了几个使用moveToThread启动线程的例子,比如这个。但我找不到如何退出。
from PyQt5.QtCore import QObject, QThread
from PyQt5.QtCore import pyqtSlot, pyqtSignal
from PyQt5.QtWidgets import QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
print("Base init")
self.start_thread()
@pyqtSlot(int)
def onFinished(self, i):
print("Base caught finished, {}".format(i))
self.thread.quit()
print('Tried to quit thread, is the thread still running?')
print(self.thread.isRunning())
def start_thread(self):
self.thread = QThread()
self.w = Worker()
self.w.finished1[int].connect(self.onFinished)
self.w.moveToThread(self.thread)
self.thread.started.connect(self.w.work)
self.thread.start()
class Worker(QObject):
finished1 = pyqtSignal(int)
def __init__(self):
super().__init__()
print("Worker init")
def work(self):
print("Worker work")
self.finished1.emit(42)
if __name__ == "__main__":
import sys
from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
这是我所有打印功能的输出(当然没有颜色):
Base init
Worker init
Worker work
Base caught finished, 42
Tried to quit thread, is the thread still running?
True
答案 0 :(得分:1)
尝试多次运行脚本。调用self.thread.isRunning()
的结果是否始终相同?尝试在检查线程是否仍在运行之前添加对time.sleep(1)
的调用。注意有什么不同吗?
请记住,您正在从程序的主线程调用另一个线程,根据定义,该线程是异步的。在执行下一条指令之前,您的程序不会等到确保self.thread.quit()
已完成。