2016-12-28 122 views
1

我有以下兩個片段顯示線程的能力,想知道有什麼區別每個實現。Python的線程/線程池的實現

from multiprocessing.dummy import Pool as ThreadPool 

def threadInfiniteLoop(passedNumber): 
    while 1: 
     print passedNumber 

if __name__ == '__main__': 
    packedVals={ 
     'number':[0,1,2,3,4,5,6,7,8,9] 
    } 
    pool = ThreadPool(len(packedVals['number'])) 
    pool.map(func=threadInfiniteLoop,iterable=packedVals['number']) 

import threading 

def threadLoop(numberPassed): 
    while 1: 
     print numberPassed 

if __name__ == '__main__': 
    for number in range(10): 
     t = threading.Thread(target=threadLoop, args=(number,)) 
     t.start() 

兩者有什麼片段和它們的初始化每個線程的區別?相對於另一方而言,是否有一個好處,哪一個會比另一個更適用?

+0

我想'ThreadPool'是更可讀,你總是可以肯定你沒有啓動9000個線程。 –

回答

0

當你要開始一直運行一個線程沒有太多的區別。

通常情況下,你可以使用一個線程池,當你的程序不斷地創造新的有限的任務「在後臺」執行(這意味着什麼)。

創建和銷燬線程相對比較昂貴,因此擁有少量線程可以長期存留下來的線程更有意義,然後一次又一次地使用這些線程來執行後臺任務。這就是線程池爲您所做的。

有通常是在創建一個線程池所有你想要的是一個單獨的線程是永遠不會終止沒有任何意義。

+0

想要在while循環中無限期運行多個線程的情況如何? – George52098

+0

@ George52098,如果你問的是啓動無限數量的線程,每個線程都做了一些小事,然後死了,那麼當我說「任務」時,那些小事就是我說的:最好使用一個線程池來完成這種工作,因爲線程池不必爲每個新任務創建一個新線程。爲每個新任務創建新線程的成本可能大大超過實際執行任務的成本。 –