Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python线程/线程池实现_Python_Multithreading_Threadpool_Python Multithreading - Fatal编程技术网

Python线程/线程池实现

Python线程/线程池实现,python,multithreading,threadpool,python-multithreading,Python,Multithreading,Threadpool,Python Multithreading,我有以下两个片段展示了线程的威力,我想知道每个实现的区别是什么 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]

我有以下两个片段展示了线程的威力,我想知道每个实现的区别是什么

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'])


这两个代码段和每个线程的初始化之间有什么区别?其中一种方法是否优于另一种方法?如果一种方法比另一种方法更适用,那么理想的情况是什么

当您想要启动一个永远运行的线程时,没有太大区别

通常,当程序不断创建新的有限任务以“在后台”执行时(无论这意味着什么),就使用线程池

创建和销毁线程的成本相对较高,因此让少量线程长时间驻留,然后反复使用这些线程来执行后台任务更有意义。这就是线程池为您所做的


当您只需要一个永远不会终止的线程时,创建线程池通常没有意义。

当您想要启动一个永远运行的线程时,没有多大区别

通常,当程序不断创建新的有限任务以“在后台”执行时(无论这意味着什么),就使用线程池

创建和销毁线程的成本相对较高,因此让少量线程长时间驻留,然后反复使用这些线程来执行后台任务更有意义。这就是线程池为您所做的


当你想要的只是一个永不终止的单线程时,创建线程池通常没有意义。

我认为
ThreadPool
更具可读性,你总是可以确定你没有启动9000个线程。我认为
ThreadPool
更具可读性,你总是可以确定你没有启动9000个线程。如何关于想在一个while循环中无限期地运行多个线程的情况?@George52098,如果你问的是启动无限数量的线程,其中每个线程做一些小事情,然后它就死了,那么这些小事情就是我在说“任务”时所说的:最好使用线程池来完成此类工作,因为线程池不必为每个新任务创建新线程。为每个新任务创建一个新线程的成本可能会大大超过实际执行任务的成本。如果希望在while循环中无限期地运行多个线程,如何?@George52098,如果你想启动无限数量的线程,其中每个线程都做一些小事情,然后就死掉了,然后这些小事情就是我在说“任务”时所说的:最好使用线程池来完成这类工作,因为线程池不必为每个新任务创建新线程。为每个新任务创建一个新线程的成本可能会大大超过实际执行任务的成本。
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()