我正在尝试在 scipy.optimize 的最小化函数调用的成本函数中使用多处理。在成本函数内部,我有一个要并行计算的循环。
代码的简化版本如下:
import numpy as np
from scipy.optimize import minimize
import multiprocessing as mp
def cost_fun(Z, arg1, arg2):
f = 0
shift_args = []
for k in range(8):
shift_args.append((arg1[ :, k], arg2[ :, k]))
p = mp.Pool(mp.cpu_count())
R = p.starmap(calc_R, shift_args)
p.close()
f = f + sum([s**2 for s in R])*Z
return f
def calc_R(x, y):
print('You are here')
return x[0] * y[3]
tmp = minimize(fun=cost_fun, x0=1, method='BFGS', options={'disp': False, 'gtol': 1e-10}, args = (np.random.rand(10,8), np.random.rand(10,8)))
R = p.starmap(calc_R, shift_args)
代码在该行冻结。
如何进行多处理?
非常感谢任何帮助。