2012-03-05 100 views
0

下面是測試代碼 - 我正在玩標準庫中找到的線程池。問題是最後的過程永遠不會結束。它只是掛起。Python線程池 - 進程永遠不會結束

我應該提到我在這裏之後,func取決於輸入可能需要幾秒鐘到幾分鐘,我希望他們儘快完成 - 無論先完成任何順序。理想情況下,我將執行的「func」數量將同時爲五個左右。

>>> from multiprocessing.pool import ThreadPool 
>>> 
>>> def func(i): 
...  import time 
...  if i % 2 == 0: time.sleep(5) 
...  print i 
... 
>>> t = ThreadPool(5) 
>>> 
>>> for i in range(10): 
...  z = t.Process(target=func, args=(i,)) 
...  z.start() 
... 
1 
3 
5 
7 
9 

>>> 0 
2 
4 
6 
8 

換句話說,打印後「8」的代碼只是在這裏等待,直到我強迫一個KeyboardInterrupt。我已經嘗試將該過程設置爲守護進程,但沒有運氣。任何建議/更好的文檔?

回答

0

從文檔池內

工作進程通常住池的工作隊列的整個持續時間。

你或許應該使用任務這樣

t.imap(func,xrange(10)) 
t.close() 
t.join()