On Aug 27, 12:45 pm, Alexandru Mosoi <[EMAIL PROTECTED]> wrote: > how is Queue intended to be used? I found the following code in python > manual, but I don't understand how to stop consumers after all items > have been produced. I tried different approaches but all of them > seemed incorrect (race, deadlock or duplicating queue functionality) > > def worker(): > while True: > item = q.get() > do_work(item) > q.task_done() > > q = Queue() > for i in range(num_worker_threads): > t = Thread(target=worker) > t.setDaemon(True) > t.start() > > for item in source(): > q.put(item) > > q.join() # block until all tasks are done
ok. I think I figured it out :). let me know what you think global num_tasks, num_done, queue num_tasks = 0 num_done = 0 queue = Queue() # producer num_tasks += 1 for i in items: num_tasks += 1 queue.put(i) num_tasks -= 1 if num_tasks == num_done: queue.put(None) # consumer while True: i = queue.get() if i is None: queue.put(None) break # do stuff num_done += 1 if num_done == num_tasks: queue.put(None) break -- http://mail.python.org/mailman/listinfo/python-list