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)
....

0 ответов

Другие вопросы по тегам