需要使用 while True:
我不太明白为什么下面这个例子里需要用到“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()
1 个回答
12
因为如果不这样做,工作线程在处理完队列中的第一个任务后就会退出。这个无限循环确保了工作线程在完成一个任务后,会从队列中获取新的任务。
更新:总结一下对我(确实有点草率)回答的评论:工作线程是守护线程(通过 t.daemon = True
来确保),这意味着当Python解释器中只剩下守护线程时,它会自动终止(更详细的解释可以在 这里 找到)。还值得一提的是,工作线程操作的队列的 get
方法在队列为空时会阻塞线程,这样可以让其他线程运行,而工作线程则在等待更多任务出现在队列中。