我不明白为什么在下面的例子中需要“while True:”
import os
import sys
import subprocess
import time
from threading import Thread
from Queue import Queue
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
def do_work(item):
time.sleep(item)
print item
q = Queue()
for i in range(2):
t = Thread(target=worker)
t.daemon = True
t.start()
source = [2,3,1,4,5]
for item in source:
q.put(item)
q.join()
答案 0 :(得分:11)
因为否则工作线程会在从队列处理完第一个作业后立即退出。无限循环确保工作线程在完成时从队列中检索新作业。
更新:将评论总结为我的(诚然仓促)答案:工作线程是守护进程(由t.daemon = True
确保),这意味着它只会在只有get
时自动终止Python解释器中留下的守护线程(更详细的解释给出here)。还值得一提的是,当队列为空时,工作者操作的队列的{{1}}方法会阻塞线程,以便在工作队员等待更多作业出现在队列中时让其他线程运行。