我正在开发一个更大的 Python 应用程序,它在数百个不同的问题场景中运行求解器。有一个 GUI 允许用户设置求解器配置。为了加快速度,我实现了一个多处理池来在应用程序中生成求解器模块的新实例。
最终发生的情况是,在创建池期间出现了四个新的 GUI 副本,这完全不是我希望发生的事情。我已经按照编程指南采取了我认为保护应用程序入口点的适当步骤,但也许我误解了关于多处理模块的一些基本内容。
在创建最小启动模块时,我已遵循此线程中的指南。
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)
那么,基于这里有限的信息,我在使用 Pool 时可能会忽略什么?
编辑:这种行为仅在我使用 py2exe 将应用程序打包成可执行文件时发生。从 Eclipse 运行时,我得到了预期的行为。