File: class/Extras/Code/pp3e/queuetest-gui.py

import thread, Queue, time
dataQueue = Queue.Queue()    # infinite size

def producer(id):
    for i in range(5):
        time.sleep(0.1)
        print 'put'
        dataQueue.put('producer %d:%d' % (id, i))
    
def consumer(root):
    try:
        print 'get'
        data = dataQueue.get(block=False)
    except Queue.Empty:
        pass
    else:
        root.insert('end', 'consumer got: %s\n' % str(data))
        root.see('end')
    root.after(250, lambda: consumer(root))    # 4 times per sec

def makethreads():
    for i in range(4):
        thread.start_new_thread(producer, (i,))

# main Gui thread: spawn batch of worker threads on each mouse click
import ScrolledText
root = ScrolledText.ScrolledText()
root.pack()
root.bind('<Button-1>', lambda event: makethreads())
consumer(root)                       # start queue check loop in main thread
root.mainloop()                      # popup window, enter tk event loop



[Home page] Books Code Blog Python Author Train Find ©M.Lutz