我有一个函数f,我想要并行计算某些大数据。数据可以分为多种方式,我试图决定如何划分它。我试图了解多处理中的“映射”.Pool正确地分配/分配数据,以便我做出正确的决定,即分割我的数据以及选择处理器的数量。我的输入数据不仅仅是一个列表,如下例所示,而是字典列表和列表列表,因此理解Pool.map如何划分数据似乎很关键。
话虽如此,我认为理解这个简单的例子可以说明更复杂的例子。
以下内容显示我们正在选择一个包含5个进程的池和[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]))
答案 0 :(得分:0)
我天真的理解是,Pool只是按顺序处理输入列表,将第一个'n'元素发送到池中,然后在第一个进程再次可用之后,那个获取下一个元素,直到不再有元素。最后,它会在返回之前等待所有元素完成。
您应该使用列表进行实验:[2,2,2,5,2,2,2]和函数:
def f(x):
sleep(x)
return x * x