我正在开发一个更大的Python应用程序,它在几百个不同的问题场景中运行一个解算器。有一个GUI允许用户设置解算器配置。为了加速这个过程,我实现了一个多处理池来在应用程序中生成求解器模块的新实例。在
最终发生的是,在创建池的过程中,出现了四个GUI的新副本,这完全不是我所希望的。我已经按照编程指南采取了我认为适当的步骤来保护应用程序的入口点,但也许我误解了多处理模块的一些基本原理。在
我遵循了this thread中创建最小启动模块的指导原则。在
在ScenarioSolver.solveOneScenario创建解算器的新实例,方案“从”到“解算”是参数列表。在
process_pool = multiprocessing.Pool(4)
for _, result in enumerate(process_pool.imap_unordered(ScenarioSolver.solveOneScenario, scenarios_to_solve)):
self.processResult(result)
那么,根据这里有限的信息,我在使用池时可能忽略了什么?在
编辑:只有当我使用py2exe将应用程序打包到可执行文件中时,才会发生这种行为。从eclipse运行时,我得到了预期的行为。在
这与在this线程中解决的问题相同。在
在^{之后立即添加
multiprocessing.freeze_support()
解决了这个问题。在相关问题 更多 >
编程相关推荐