我在 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 中获取,但也得到了枚举迭代器,我不知道我应该用它做什么。关于如何让它按照我希望的方式工作的任何提示?
事实证明我没有正确使用 pool.map((。我需要
from functools import partial
my_list = list(np.ndenumerate(array1))
result = mp.pool(partial(mpFunction, ***kwargs), my_list)
并实际执行return ...
,将数据从我的mpFunction实际提取到现实世界中。