当前,我有一个函数optimizer()
,可在内部将某些错误最小化并返回一个100x100
参数矩阵M
:
def optimizer(M):
# some nondeterministic optimization of parameter matrix M
return M
此过程大约需要一分钟,并且被循环调用n_steps
次。
for step in range(n_steps):
M = optimizer(M)
为加速该过程,我想并行化此功能,以便可以在理想情况下使用我必须做的所有内核number_of_processors
,同时完成更多工作。
我想知道哪种方法更好,是否有我没有考虑过的方法,或者我是否完全误解了多处理程序包的某些概念。
import multiprocessing as mp
n_cores = 4
pool = mp.Pool(processes = n_cores)
for step in range(n_steps):
M_tmp = [pool.apply_async(optimizer,args=(M,)) for p in range(n_cores)]
M_tmp = [m.get() for m in M_tmp]
M = test_parameters(M_tmp)
在这里,由四个而不是一个工作人员来优化矩阵M
并返回其优化版本。 M_tmp
持有n_cores
个矩阵,然后在test_parameters()
中进行比较。然后选择具有最佳属性的矩阵并返回。
我想到的另一种方法非常相似,并使用pool.map()
import multiprocessing as mp
n_cores = 4
pool = mp.Pool(processes = n_cores)
for step in range(n_steps):
M_tmp = pool.map(optimizer,[M for p in range(n_cores)])
M = test_parameters(M_tmp)
现在,我不知道该采取什么方法。有什么建议吗?