Python 虽然真实,但需要:

Python 虽然真实,但需要:,python,Python,我不明白为什么在下面的例子中需要“whiletrue:” 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(

我不明白为什么在下面的例子中需要“whiletrue:”

  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()

因为否则,工作线程将在队列中处理第一个作业后立即退出。无限循环确保工作线程在完成时从队列中检索新作业


更新:总结一下对我(当然是仓促)回答的评论:工作线程是守护线程(由
t.daemon=True
确保),这意味着当Python解释器中只剩下守护线程时,它将自动终止(给出了更详细的解释)。还值得一提的是,当队列为空时,工人操作的队列的
get
方法会阻塞线程,以便在工人等待更多作业出现在队列中时让其他线程运行。

我知道“while”做了什么+1也值得加上
q.get()
当队列为空时阻塞,从而避免运行繁忙的循环我认为值得一提的是,它不会落入无限循环,因为工作线程是守护线程。谢谢各位,我已经扩展了我的答案以包括这一点。