This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author vstinner
Recipients docs@python, pitrou, vstinner
Date 2011-05-23.10:22:29
SpamBayes Score 0.00019479012
Marked as misclassified No
Message-id <1306146151.16.0.671326557503.issue12155@psf.upfronthosting.co.za>
In-reply-to
Content
The queue doc contains the following example:
------------------
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.daemon = True
     t.start()

for item in source():
    q.put(item)

q.join()       # block until all tasks are done
------------------
http://docs.python.org/library/queue.html

It doesn't define do_work(), num_worker_threads or do_work(), but my concern is that it doesn't stop worker threads.

I consider "t.daemon = True" as an hack to not care about stopping threads.

The example should pass a special value to each worker to stop it. For example:

<worker>

while True:
  job = queue.get()
  if job is None:
     break
  audio.play(*job)
  queue.task_done()

Main thread:

...
threads = []
for i in range(num_worker_threads):
     t = Thread(target=worker)
     threads.append(t)
     t.start()
...
for i in range(num_worker_threads):
     queue.put(None)
queue.join()
for thread in threads:
    thread.join()
History
Date User Action Args
2011-05-23 10:22:31vstinnersetrecipients: + vstinner, pitrou, docs@python
2011-05-23 10:22:31vstinnersetmessageid: <1306146151.16.0.671326557503.issue12155@psf.upfronthosting.co.za>
2011-05-23 10:22:30vstinnerlinkissue12155 messages
2011-05-23 10:22:29vstinnercreate