【发布时间】:2012-05-07 18:06:27
【问题描述】:
我正在开发一个更大的 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)
那么,基于这里有限的信息,我在使用 Pool 时可能会忽略什么?
编辑:这种行为仅在我使用 py2exe 将应用程序打包成可执行文件时发生。从 Eclipse 运行时,我得到了预期的行为。
【问题讨论】:
-
你有什么问题?
multiprocessing应该产生新进程。 -
我正在开始获取整个应用程序的新副本。我会看到 4 个新窗口出现。这些进程应该只在应用程序中运行模块的实例。
-
为澄清问题而编辑(希望如此)
标签: python multiprocessing python-2.6 pool