2016-12-28 104 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,如果你问的是启动无限数量的线程,每个线程都做了一些小事,然后死了,那么当我说“任务”时,那些小事就是我说的:最好使用一个线程池来完成这种工作,因为线程池不必为每个新任务创建一个新线程。为每个新任务创建新线程的成本可能大大超过实际执行任务的成本。 –