Python的multiprocessing.Pool.map中的"chunksize"参数

ser*_*gio 39 python multiprocessing

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

p=multiprocessing.Pool(2)
Run Code Online (Sandbox Code Playgroud)

我想迭代目录上的文件列表并使用map函数

有人可以解释这个函数的chunksize是什么:

p.map(func, iterable[, chunksize])
Run Code Online (Sandbox Code Playgroud)

如果我将chunksize设置为10,那意味着每10个文件应该用一个处理器处理吗?

det*_*tly 36

看看Pool.map文档,看起来你几乎是正确的:chunksize参数将导致iterable被分割成大约相同大小的片段,并且每个片段作为单独的任务提交.

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

  • @newkid - 没什么特别的,无论你迭代什么,都会被分成*大约*每个处理器一个“东西”。 (2认同)
  • @DavidIreland,我通常会采取另一种方式 - 如果发送每个单独的任务没有太多开销(例如,您只按值传递几个参数),请使用一个块大小作为您的理论起点,并考虑如何每个任务需要多长时间以及方差有多大。您希望块大小使得时间变化与处理单个块所需的时间相匹配(达到一个数量级)。 (2认同)