带有多处理功能的Python并行优化过程

当前,我有一个函数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)

现在,我不知道该采取什么方法。有什么建议吗?

ananxiao 回答:带有多处理功能的Python并行优化过程

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3143546.html

大家都在问