[英]python multiprocessing Pool: processes spawn new copies of main application
我正在开发一个较大的Python应用程序,该应用程序在数百种不同的问题场景下运行求解器。 有一个GUI,允许用户设置求解器配置。 为了加快速度,我实现了一个多处理池,以在应用程序中生成求解器模块的新实例。
最终发生的事情是,在创建池的过程中出现了四个新的GUI副本,这完全不是我希望发生的事情。 我已经按照编程指南采取了我认为是保护应用程序入口点的适当步骤,但是也许我误解了多处理模块的基本知识。
在创建最小启动模块时,我遵循了该主题中的指导。
ScenarioSolver.solveOneScenario创建一个新的求解器实例,scenarios_to_solve是一个参数列表。
process_pool = multiprocessing.Pool(4)
for _, result in enumerate(process_pool.imap_unordered(ScenarioSolver.solveOneScenario, scenarios_to_solve)):
self.processResult(result)
因此,基于此处的有限信息,使用游泳池时我可能会忽略什么?
编辑:仅当我使用py2exe将应用程序打包为可执行文件时,才会发生这种行为。 从日食运行时,我得到了预期的行为。
这是与该线程中解决的问题相同的问题。
if __name__ == '__main__'
解决此问题, if __name__ == '__main__'
立即添加multiprocessing.freeze_support()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.