Cómo ejecutar dos hilos diferentes simultáneamente en pyqt

Tengo una situación en la que necesito comenzar dos hilos uno después del otro. Intenté el siguiente fragmento de código, aquí pude iniciar Thread12 pero no pude iniciar Thread2. ¿Cómo puedo empezar tanto …? ¿Cómo comenzar 2 hilos uno de otro el otro …?

Fragmento de código

class Thread1(QtCore.QThread): Thread1Signal = QtCore.pyqtSignal(str) def __init__(self): super(Thread1, self).__init__() def run(self): print 'Thread1 started' While True: #some statments if Condition: Thread1Signal.emit('Yes') else: Thread1Signal.emit('No') class Thread2(QtCore.QThread): Thread2Signal = QtCore.pyqtSignal(str) def __init__(self): super(Thread2, self).__init__() def run(self): print 'Thread2 started' While True: #some statments if Condition: Thread2Signal.emit('Yes') else: Thread2Signal.emit('No') class MainClass(QtCore.QObject): MainSignal1 = QtCore.pyqtSignal(str) MainSignal2 = QtCore.pyqtSignal(str) def __init__(self): super(MainClass, self).__init__() Threadinstance1 = Thread1() Threadinstance1.Thread1Signal.connect(MainSignal1) Threadinstance2 = Thread2() Threadinstance2.Thread2Signal.connect(MainSignal2) def start(self): Threadinstance1.start() Threadinstance2.start() #Thread2 never starts. def signal1called(s): print s def signal2called(s): print s if __name__=='__main__': app = AtGui.QApplication(sys.argv) temp = MainClass() temp.MainSignal1.connect(signal1called) temp.MainSignal2.connect(signal2called) temp.start() sys.exit(app.exec()_) 

Utilizará QRunnable y QThreadPool , algo como esto:

 import sys from PyQt4.QtGui import QApplication from PyQt4.QtCore import QThreadPool, QObject, QRunnable, pyqtSignal class WorkerSignals(QObject): result = pyqtSignal(int) class Worker(QRunnable): def __init__(self, task): super(Worker, self).__init__() self.task = task self.signals = WorkerSignals() def run(self): print 'Sending', self.task self.signals.result.emit(self.task) class Tasks(QObject): def __init__(self): super(Tasks, self).__init__() self.pool = QThreadPool() self.pool.setMaxThreadCount(1) def process_result(self, task): print 'Receiving', task def start(self): for task in range(10): worker = Worker(task) worker.signals.result.connect(self.process_result) self.pool.start(worker) self.pool.waitForDone() if __name__ == "__main__": import sys app = QApplication(sys.argv) main = Tasks() main.start() sys.exit(app.exec_())