我正在使用DEAP库来实现基因编程,为此我使用了eaMuCommaLambda algorithm
。为了并行运行程序,我遵循了DEAP document中的说明,并在if __name__ == "__main__"
部分中添加了以下两行代码。
import multiprocessing
pool = multiprocessing.Pool()
toolbox.register("map", pool.map)
pop, log = algorithms.eaMuCommaLambda(pop, toolbox, MU, LAMBDA, cxpb, mutpb, gen, halloffame=hof, stats=mstats, verbose=True)
在eaMuCommaLambda algorithm
的源代码中,评估操作映射如下:
fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
因此,通过将默认映射替换为pool.map,可以预期并行执行评估操作。该程序运行没有错误,但没有执行任何操作。最初,我可以看到几个进程在任务管理器中启动,但是很快它们的CPU使用率降为零,并且程序继续运行,而实际上似乎没有任何计算。根本不执行评估功能。该代码可以在没有多重处理的情况下正常工作,但是我不确定为什么多重处理无法正常工作。如果有人可以提出原因,我将不胜感激。
答案 0 :(得分:0)
在评估算法之后,请添加以下代码,然后尝试
pool.close()
这将确保关闭所有已启动的池。
希望这可以加快您的流程。
答案 1 :(得分:0)
我正在使用PyCharm在Windows中运行代码,并且似乎是多处理。池不能在交互式解释器中使用。可以在以下链接中找到更多信息:https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000384464-Problem-using-multiprocess-with-IPython
通过在cmd中运行代码解决了问题。