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,不,你是对的,否则你需要将列表平铺,或者构建自己的流程池,知道如何处理特定的改进:)