我有以下两个片段展示了线程的强大功能,并且想知道每个实现的区别是什么。
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 :(得分:0)
当您想要创建一个永远运行的线程时,没有多大区别。
通常,当程序不断创建新的有限任务以在后台执行时,您使用线程池" (无论那意味着什么)。
创建和销毁线程相对比较昂贵,因此让少数线程长时间停留在一起更有意义,然后一遍又一遍地使用这些线程来执行后台任务。这就是线程池为你做的事情。
当你想要的只是一个永不终止的单个线程时,通常没有必要创建一个线程 pool 。