关于python:需要while True:

Need for while True:

我不明白为什么下面的例子中需要"while true:"。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
  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()


否则,一旦从队列处理第一个作业,工作线程就会退出。无限循环确保工作线程在完成时从队列中检索新作业。

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