Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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中的参数';s multiprocessing.Pool.map_Python_Multiprocessing - Fatal编程技术网

&引用;“块大小”;Python中的参数';s multiprocessing.Pool.map

&引用;“块大小”;Python中的参数';s multiprocessing.Pool.map,python,multiprocessing,Python,Multiprocessing,例如,如果我有一个带有两个处理器的池对象: p=multiprocessing.Pool(2) 我想遍历目录中的文件列表并使用map函数 有人能解释一下这个函数的chunksize是多少吗 p.map(func, iterable[, chunksize]) 例如,如果我将chunksize设置为10,这是否意味着每10个文件都应该由一个处理器处理?看一下,似乎您几乎是正确的:chunksize参数将导致iterable拆分为约为该大小的片段,每件作品都作为单独的任务提交 因此,在您的示例中

例如,如果我有一个带有两个处理器的池对象:

p=multiprocessing.Pool(2)
我想遍历目录中的文件列表并使用map函数

有人能解释一下这个函数的chunksize是多少吗

p.map(func, iterable[, chunksize])
例如,如果我将chunksize设置为10,这是否意味着每10个文件都应该由一个处理器处理?

看一下,似乎您几乎是正确的:
chunksize
参数将导致iterable拆分为约为该大小的片段,每件作品都作为单独的任务提交


因此,在您的示例中,是的,
map
将取前10个(大约),将其作为单个处理器的任务提交。。。接下来的10个任务将作为另一个任务提交,依此类推。请注意,这并不意味着这将使处理器每10个文件交替一次,很有可能处理器#1最终得到1-10和11-20,处理器#2得到21-30和31-40。

@newkid-没什么特别的,不管你在迭代什么,都会被分成大约一个“东西”的碎片有没有办法知道一个“好”的块大小是多少?e、 我需要运行1k次模拟,我有10个处理器要处理。。。使用100的块大小有意义吗?这意味着每个处理器运行的模拟量大致相同,对吗?@DavidIreland这在很大程度上是“经验法则”领域。我不会直接用任务数除以处理器数,因为如果一个块由于参数或随机变化而提前完成,那么就会有一个处理器闲置。@DavidIreland我通常会用另一种方法——如果发送每个任务的开销不大的话(例如,您仅通过值传递了几个参数),将chunksize作为理论起点,并考虑每个任务需要多长时间以及差异有多大。您希望chunksize的大小能够使时间上的变化匹配(一个数量级)处理单个区块所需的时间。感谢您的回复!在我了解区块大小之前,我使用的是默认值(1)我没有考虑一个进程是否会因为模拟中的差异而结束,一个处理器可能会处于空闲状态,所以我想我必须选择一个足够大的块大小,以克服将任务分配给处理器的开销,但不会太大,以至于处理器c你会没事的。非常感谢!