処理が完了したスレッドを終了しようとしています。私はmoveToThreadを使用しています。私はスロット内でself.thread.quit()を呼び出すことによって、メインスレッドからワーカースレッドを終了しようとしています。それは機能していません。moveToThreadを使用しているときに、PyQt5でQThreadを正しく終了する方法
私は、このようなmoveToThreadを使用してスレッドを開始するいくつかの例を見出しました。しかし、私は1つを終了する方法を見つけることができません。
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
ありがとうございます!あなたが正しいです。結局のところ、スレッドは終了していました。 print(self.thread.isRunning())はFalseを示します。time.sleep(1)を追加した後、 – squirtgun