New submission from STINNER Victor <[email protected]>:
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()
----------
assignee: docs@python
components: Documentation
messages: 136601
nosy: docs@python, haypo, pitrou
priority: normal
severity: normal
status: open
title: queue example doesn't stop worker threads
versions: Python 2.7, Python 3.1, Python 3.2, Python 3.3
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue12155>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com