我有一个要在大量数据上并行计算的函数 f。这些数据可以通过多种方式进行划分,我正在尝试决定如何划分它们。我希望了解 multiprocessing.Pool 中的“map”究竟是如何分配/划分数据的,以便我能正确地决定如何拆分我的数据以及选择处理器的数量。我的输入数据不只是简单的列表,而是包含字典和列表的列表,因此理解 Pool.map 如何划分数据似乎至关重要。
话虽如此,我认为了解简单的示例就足以说明更复杂的情况。
以下代码显示我们选择了一个由 5 个进程组成的 Pool,并且数据是 [1,2,3]。这里对于如何划分数据做了什么隐含的选择?
from multiprocessing import Pool
def f(x):
return x*x
if __name__ == '__main__':
p = Pool(5)
print(p.map(f, [1, 2, 3]))
divmod()
返回的chunksize
是0,而extra
是3。然后由于extra
不为0,所以chunksize
增加了1。 - Tim Peters