New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
queue example doesn't stop worker threads #56364
Comments
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: ... |
Is it unclear to you what those mean? They are placeholders for the user's actual task at hand.
Stopping the threads wasn't the intent of the example.
If you post a high-quality self-contained example somewhere on the net, I would be happy to link to it. |
Well, it's clear, but I like when I can simply copy/paste the example and it does just work:
I just propose to change the example to stop the threads: def worker():
while True:
item = q.get()
if item is None:
break
do_work(item)
q.task_done()
q = Queue()
threads = []
for i in range(num_worker_threads):
t = Thread(target=worker)
threads.append(t)
t.start()
for item in source():
q.put(item)
q.join() # block until all tasks are done
for i in range(num_worker_threads):
q.put(None)
for t in threads: t.join() |
The proposed change adds about 7 lines to show the 'trick' of putting num-worker Nones on the queue. I think that is worth it. |
New changeset b44ec269abda by Victor Stinner in branch 'default': |
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
bugs.python.org fields:
The text was updated successfully, but these errors were encountered: