Python 如何将parallel Pool.map应用于嵌套列表
我有一个嵌套的参数列表(基本上是一个矩阵),我想传递给一个耗时的函数。我想使用Python 如何将parallel Pool.map应用于嵌套列表,python,parallel-processing,Python,Parallel Processing,我有一个嵌套的参数列表(基本上是一个矩阵),我想传递给一个耗时的函数。我想使用multiprocess.Pool并行化代码。如果我有一个参数列表,我只需在该列表上调用Pool.map 但是如何在矩阵上使用Pool.map,使结果仍然是2D矩阵格式 假设我有一个函数f(x)和一个列表 l = [[1, 2, ..., n], [n + 1, ..., 2n], [(m-1)*n, ..., n*m] 我如何获得该列表 [[f(1), f(2), ..., f(n)], [f(n + 1), ..
multiprocess.Pool
并行化代码。如果我有一个参数列表,我只需在该列表上调用Pool.map
但是如何在矩阵上使用Pool.map
,使结果仍然是2D矩阵格式
假设我有一个函数f(x)
和一个列表
l = [[1, 2, ..., n], [n + 1, ..., 2n], [(m-1)*n, ..., n*m]
我如何获得该列表
[[f(1), f(2), ..., f(n)], [f(n + 1), ..., f(2*n)], [f((m-1)*n), ..., f(n*m)]
通过使用进程池来并行计算f,这是一个耗时的函数?这里有一个简单的示例,只需在矩阵上调用
map
,应用pool.map
:
import multiprocessing
def add(x):
return x + 10
if __name__ == "__main__":
pool = multiprocessing.Pool() # build the process pool
l = [range(10) for _ in xrange(10)] # we build an example list
res = map(lambda x: pool.map(add, x), l) # we apply the pool.map with the map to the list
multiprocessing.freeze_support() # this line is needed on windows only
print res
这是印刷品目录:
>>>[[10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]]
张贴一个您希望如何处理数据的示例please@DanielSanchez我编辑了我的问题。我知道一个可能的解决方案是将列表
l
,映射到f
,然后适当地重新调整输出,但我想知道是否有更干净、更具python风格的方法。查看下面的答案。好的,谢谢!所以这会并行计算矩阵的每一行。然而,这可能比并行计算整个矩阵的效率要低,因为可用核的数量可能不是行长度的除数,因此某些核在等待行的其余进程完成时可能处于空闲状态。@Pincopallino,您必须使池产生与计算机中处理器数量相同的进程。在过程中,对等操作不是实现这一点的方法。可能我没有很好地表达自己。我是说,如果我有6个进程,矩阵的一行有10个元素,在对行的前6个元素求值后,将有两个内核空闲,等待行中剩余的4个元素求值,而下一行的前两个元素可以同时求值。或者这种方法将矩阵中的所有元素排在一起吗?@Pincopallino,不,你是对的,否则你需要将列表平铺,或者构建自己的流程池,知道如何处理特定的改进:)