我正在研究一个更大规模的Python应用程序,该应用程序在几百个不同的问题场景中运行求解器。有一个GUI允许用户设置解算器配置。为了加快速度,我已经实现了一个多处理池来在应用程序中生成求解器模块的新实例。
最终发生的事情是,在游戏池的创建过程中会出现四个新的GUI副本,这完全不是我想要发生的事情。我根据编程指南采取了我认为是保护应用程序入口点的适当步骤,但也许我误解了多处理模块的基本原理。
我已按照this thread中的指南创建了一个最小的启动模块。
ScenarioSolver.solveOneScenario创建解算器的新实例,scenario_to_solve是参数列表。
process_pool = multiprocessing.Pool(4)
for _, result in enumerate(process_pool.imap_unordered(ScenarioSolver.solveOneScenario, scenarios_to_solve)):
self.processResult(result)
所以,根据这里有限的信息,我在使用游泳池时可能会忽略什么?
编辑:只有当我使用py2exe将应用程序打包到可执行文件中时,才会发生此行为。从eclipse运行时,我得到了预期的行为。
答案 0 :(得分:0)
这与this线程中解决的问题相同。
在multiprocessing.freeze_support()
解决此问题后立即添加if __name__ == '__main__'
。