use of Queue

Alexandru Mosoi brtzsnr at gmail.com
Wed Aug 27 08:17:59 EDT 2008


On Aug 27, 12:45 pm, Alexandru  Mosoi <brtz... at gmail.com> 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








More information about the Python-list mailing list