PyQt QueuedConnection иногда работает
У меня есть приложение, использующее QThreads. Я добавляю разные методы к соединению в очереди, и они выполняются в этой последовательности. Это работает очень хорошо. Но в зависимости от порядка тестов (последовательность может быть в любом порядке), мое приложение просто остановится (оно не зависнет, но не завершит вызов остальных тестов в очереди). Например, если выполняется последовательность [test1, test2, test3]. Я смогу запустить и закончить (сигнал завершения выдается) test1 и test2, но test3 не будет вызван. Однако это случается иногда, а не постоянно. Я думаю, что нить завершается до того, как все задачи завершены. Есть что-то, что я должен очистить?
Соответствующий код ниже:
# Initialize QThread
self.obj = signalTest.Worker()
self.thread = QThread()
self.obj.moveToThread(self.thread)
self.obj.finished.connect(self.signalFinished)
def runTests(self) # This is triggered by clicking a button
self.thread.start()
for index in range(0, len(sequence)):
if self.queue[index] == 'test1'
QMetaObject.invokeMethod(self.obj, 'run_test1', Qt.QueuedConnection,
Q_ARG(int, index)
elif self.queue[index] == 'test2'
QMetaObject.invokeMethod(self.obj, 'run_test2', Qt.QueuedConnection)
elif self.queue[index] == 'test3'
QMetaObject.invokeMethod(self.obj, 'run_test3', Qt.QueuedConnection)
@pyqtSlot(int)
def signalFinished(self, row)
# Do something here
Рабочая нить:
class Worker(QObject):
finished = pyqtSignal(int)
@pyqtSlot(int)
def test1(self):
"""
Runs test1
"""
if self.abort is False:
# Run test1 here
self.finished.emit(row)
....