File: class/Extras/Code/pp3e/queuetest-gui-class.py
import thread, Queue, time
from ScrolledText import ScrolledText
class ThreadGui(ScrolledText):
threadsPerClick = 4
def __init__(self, parent=None):
ScrolledText.__init__(self, parent)
self.pack()
self.dataQueue = Queue.Queue() # infinite size
self.bind('<Button-1>', self.makethreads) # on left mouse click
self.consumer() # queue loop in main thread
def producer(self, id):
for i in range(5):
time.sleep(0.1)
self.dataQueue.put('producer %d:%d' % (id, i))
def consumer(self):
try:
data = self.dataQueue.get(block=False)
except Queue.Empty:
pass
else:
self.insert('end', 'consumer got: %s\n' % str(data))
self.see('end')
self.after(250, self.consumer) # 4 times per sec
def makethreads(self, event):
for i in range(self.threadsPerClick):
thread.start_new_thread(self.producer, (i,))
root = ThreadGui()
root.mainloop() # popup window, enter tk event loop