Проблема в том, что QThread для отправки / получения СИГНАЛОВ, он должен запускать EventLoop. Вы не, так что нет возможности для ответа в теме. Проверьте это сообщение в блоге: Вы делаете это неправильно
Вот пример, который работает для меня - обратите внимание на то, что вам нужно вызвать moveToThread ПЕРЕД тем, как вы подключите сигналы (это не упоминалось в блоге - не уверен, относится ли это к PyQt), иначе они будут работать в основном нить.
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import time
class MyThread(QThread):
def __init__(self, name):
super(MyThread, self).__init__()
self.setObjectName(name)
def run(self):
print "RUN", QThread.currentThread().objectName(), QApplication.instance().thread().objectName()
self.exec_()
print "RUN DONE", QThread.currentThread().objectName()
class Producer(QObject):
def __init__(self, parent=None):
super(Producer, self).__init__(parent)
def Start(self):
for i in range(5):
print "Producer",i,QThread.currentThread().objectName()
self.emit(SIGNAL("testsignal"),i)
time.sleep(2)
time.sleep(1)
qApp.quit()
class Consumer(QObject):
def __init__(self, parent=None):
super(Consumer, self).__init__(parent)
def Consume(self, i):
print "Consumed",i,QThread.currentThread().objectName()
if __name__ == "__main__":
app = QApplication([])
producer = Producer()
consumer = Consumer()
QThread.currentThread().setObjectName("MAIN")
producerThread = MyThread("producer")
consumerThread = MyThread("consumer")
producer.moveToThread(producerThread)
consumer.moveToThread(consumerThread)
producerThread.started.connect(producer.Start)
producer.connect(producer, SIGNAL("testsignal"), consumer.Consume)
def aboutToQuit():
producerThread.quit()
consumerThread.quit()
time.sleep(1)
qApp.aboutToQuit.connect(aboutToQuit)
consumerThread.start()
time.sleep(.1)
producerThread.start()
sys.exit(app.exec_())