真的需要:

Vjy*_*Vjy 2 python

我不明白为什么在下面的例子中需要"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()
Run Code Online (Sandbox Code Playgroud)

Tam*_*más 11

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

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

  • 我认为值得一提的是,它不会陷入无限循环,因为工作线程是守护进程. (2认同)