【发布时间】:2013-10-23 15:35:14
【问题描述】:
这是来自 Python 文档的示例代码:
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
我修改它以适合我的用例,如下所示:
import threading
from Queue import Queue
max_threads = 10
q = Queue(maxsize=max_threads + 2)
def worker():
while True:
task = q.get(1)
# do something with the task
q.task_done()
for i in range(max_threads):
t = threading.Thread(target=worker)
t.start()
for task in ['a', 'b', 'c']:
q.put(task)
q.join()
当我执行它时,调试器说所有作业都已执行,但 q.join() 似乎永远等待。如何向已发送所有任务的工作线程发送信号?
【问题讨论】:
-
最新的可能错字:当循环变量为
tasks时,您是否打算将task放入队列中?我不这么认为... -
是的,一个错字。谢谢,我编辑了。
-
排队包含thread.exit()的任务?
标签: python multithreading queue message-queue python-multithreading