需要使用 while True:

3 投票
1 回答
2172 浏览
提问于 2025-04-16 19:56

我不太明白为什么下面这个例子里需要用到“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 方法在队列为空时会阻塞线程,这样可以让其他线程运行,而工作线程则在等待更多任务出现在队列中。

撰写回答