我在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迭代器,而且我不知道该怎么做。关于如何使其按我希望的方式工作的任何提示吗?
答案 0 :(得分:0)
结果是我没有正确使用pool.map()。我需要
from functools import partial
my_list = list(np.ndenumerate(array1))
result = mp.pool(partial(mpFunction, ***kwargs), my_list)
并实际执行return ...
来实际上将数据从我的mpFunction中提取到现实世界中。