1

我正在开发一个更大的 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 运行时,我得到了预期的行为。

4

1 回答 1

0

这与此线程中解决的问题相同。

解决此问题multiprocessing.freeze_support()后立即添加。if __name__ == '__main__'

于 2012-05-09T13:42:52.197 回答