具有ndenumerate的Python 2.7多处理和具有数组/函数参数的函数

时间:2020-05-26 15:06:08

标签: python numpy multiprocessing python-multiprocessing

我在2.7中有一个函数,希望可以加快多处理的速度。我的代码实际上是大量的4x4 ndarray,它们是这样的。

import numpy as np

def randomFunction(array1, array4, val):
  # Some random function that does auxiliary task but that gets called each iteration

def mpFunction(array1, array2, ... array X, randomFunction, (i, j, k), val):
  # Code that calls things like array1[i, j, k], uses val, calls randomFunction, etc.


array1 = np.zeros((largeNumber, 4, 4), dtype='float')
array2 = np.zeros((largeNumber, 4, 4), dtype='float')
arrayX = *more 4D arrays that have actual data in them*

for (i, j, k), val in np.ndenumerate(array1):
  mpFunction(array1, array2, ... array X, randomFunction, (i, j, k), val)

该函数几乎可以并行化,但是我不确定如何实现此功能。我尝试过

from multiprocessing import Pool

...
pool = Pool()
results = pool.map(mpFunction(array1, arary2, ... array X, randomFunction), np.ndenumerate(array1))

但是调试显示我可以在mpFunction中获得所有函数,还可以使用ndenumerate迭代器,而且我不知道该怎么做。关于如何使其按我希望的方式工作的任何提示吗?

1 个答案:

答案 0 :(得分:0)

结果是我没有正确使用pool.map()。我需要

from functools import partial

my_list = list(np.ndenumerate(array1))
result = mp.pool(partial(mpFunction, ***kwargs), my_list)

并实际执行return ...来实际上将数据从我的mpFunction中提取到现实世界中。