我正在尝试学习差分进化方法的并行执行。我使用了文档中的example:
from scipy.optimize import rosen, differential_evolution
bounds = [(0,2), (0, 2), (0, 2), (0, 2), (0, 2)]
result = differential_evolution(rosen, bounds, updating='deferred',workers=2)但它会抛出以下错误:

有人能提出一个解决这个问题的方法吗?
发布于 2021-05-11 05:56:27
如果提供了workers参数,该Scipy函数将在幕后使用multiprocessing模块。因此,我们必须在“主模块的安全导入”一节中“使用if __name__ == '__main__'”as the documentation insists来保护程序的入口点。
if __name__ == '__main__':
from scipy.optimize import rosen, differential_evolution
bounds = [(0,2), (0, 2), (0, 2), (0, 2), (0, 2)]
result = differential_evolution(rosen, bounds, updating='deferred',workers=2)
print(result)Scipy文档中的示例在交互式Python会话中运行,而这不是必需的。但是当作为脚本运行时,我们必须添加代码围栏,以避免您遇到的错误。否则,优化运行将在多个进程中的每个进程中一遍又一遍地开始。
在Linux上运行脚本时,代码栏也不是必需的。在该平台上,工作进程的默认"start method"是"fork“(如错误消息中所述),而不是像在Windows和macOS上那样的”派生“。"fork“方法更轻量级,避免重新启动Python解释器,这就是入口点不需要保护的原因。
https://stackoverflow.com/questions/67475817
复制相似问题