3 from __future__ import with_statement
4 from __future__ import division
17 import PySide.QtCore as _QtCore
22 sip.setapi('QString', 2)
23 sip.setapi('QVariant', 2)
24 import PyQt4.QtCore as _QtCore
30 Signal = QtCore.Signal
32 Property = QtCore.Property
34 Signal = QtCore.pyqtSignal
35 Slot = QtCore.pyqtSlot
36 Property = QtCore.pyqtProperty
41 def log_exception_decorator(func):
43 @functools.wraps(func)
44 def wrapper(*args, **kwds):
46 return func(*args, **kwds)
48 print "Exception", func.__name__
56 return log_exception_decorator
59 class QThread44(QtCore.QThread):
61 This is to imitate QThread in Qt 4.4+ for when running on older version
62 See http://labs.trolltech.com/blogs/2010/06/17/youre-doing-it-wrong
63 (On Lucid I have Qt 4.7 and this is still an issue)
66 def __init__(self, parent = None):
67 QtCore.QThread.__init__(self, parent)
73 class Producer(QtCore.QObject):
79 QtCore.QObject.__init__(self)
84 print "Starting producer"
91 class Consumer(QtCore.QObject):
94 QtCore.QObject.__init__(self)
99 print "Starting consumer"
103 def print_done(self):
108 def print_data(self, i):
112 def run_producer_consumer():
113 app = QtCore.QCoreApplication([])
115 producerThread = QThread44()
116 producer = Producer()
117 producer.moveToThread(producerThread)
118 producerThread.started.connect(producer.process)
120 consumerThread = QThread44()
121 consumer = Consumer()
122 consumer.moveToThread(consumerThread)
123 consumerThread.started.connect(consumer.process)
125 producer.data.connect(consumer.print_data)
126 producer.done.connect(consumer.print_done)
131 print "Shutting down"
132 producerThread.quit()
133 consumerThread.quit()
135 producer.done.connect(producer_done)
148 producerThread.finished.connect(thread_done)
149 consumerThread.finished.connect(thread_done)
151 producerThread.start()
152 consumerThread.start()
153 print "Status %s" % app.exec_()
156 if __name__ == "__main__":
157 run_producer_consumer()