【问题标题】:python multiprocessing Pool: processes spawn new copies of main applicationpython多处理池:进程产生主应用程序的新副本
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-07-17
    • 2019-04-06
    • 2013-12-01
    • 2022-06-21
    • 2022-01-08
    • 1970-01-01
    • 2022-11-30
    • 2017-10-25
    • 2015-01-13
    相关资源
    最近更新 更多