【发布时间】:2017-07-13 01:40:59
【问题描述】:
Python 3 文档给出了一个使用队列 (https://docs.python.org/3/library/queue.html) 的工作线程示例:
def worker():
while True:
item = q.get()
if item is None:
break
do_work(item)
q.task_done()
q = queue.Queue()
threads = []
for i in range(num_worker_threads):
t = threading.Thread(target=worker)
t.start()
threads.append(t)
for item in source():
q.put(item)
# block until all tasks are done
q.join()
# stop workers
for i in range(num_worker_threads):
q.put(None)
for t in threads:
t.join()
在这个例子中,为什么需要q.join()?后续的q.put(None) 和t.join() 操作是否完成了阻塞主线程直到工作线程完成的相同事情?
【问题讨论】:
标签: python multithreading python-3.x queue