2011-06-20 55 views
2

我不明白爲什麼「而真正的:」需要在例如極品,而真:

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

我知道什麼「while」的確如此 – Vjy

回答

11

下面因爲否則工作線程會盡快的第一份工作是從隊列中處理退出。無限循環確保工作線程在完成時從隊列中檢索新作業。

更新:總結意​​見,我(當然倉促)答案:工作者線程是後臺。(由t.daemon = True保證),這意味着,當有剩餘的Python解釋器只守護線程將自動終止(更詳細的解釋給出here)。還值得一提的是,當隊列爲空時,工作人員所在的隊列的get方法會阻塞線程,以使其他線程在工作人員等待更多作業出現在隊列中時運行。

+1

+1同樣值得在隊列爲空的時候加上'q.get()'塊,這樣可以避免運行一個繁忙的循環 –

+2

我認爲值得一提的是,它沒有陷入無限循環,因爲工作者線程是守護進程的。 – khachik

+0

謝謝你們,我已經把我的答案擴大到包括這個。 –