Python 中的并行处理,需要 if __name__ == '__main__'

问题描述 投票:0回答:1

我一直在与我的应用程序中的“并行处理需求”作斗争。我比较清楚,GIL 会阻止单个解释器中的并发处理,并且每个进程只能有一个解释器。至少到3.10(我需要使用3.8来集成制造商的驱动程序)。但我的申请证明具有挑战性。 我的申请要求:

在我的应用程序中,我们正在创建一个

图像采集模块

,它将处理连接到计算机的任意数量的 Flir 相机,用于机器人和机器视觉。这意味着图像采集模块将与控制重要事物的其他模块并行运行,例如电机和 DAQ。 初始化时,图像采集模块会检查系统中的所有摄像机,看看哪一个具有所请求的名称:

import ImageAcquisition as ia ia.Initialize("cam1", "cam2") # Creates two parallel process. One for each camera.

对于每个相机,应创建一个并行进程来处理与其相关的图像分析。这意味着抓取帧、显示它们、处理它们,并使一些图像分析结果可供主进程使用。

一个重要的要求是模块是独立的。但是,我发现程序入口代码(客户端代码)中始终需要

if __name__ == "__main__":

测试。这是因为新进程也将在其解释器上运行主程序。

除了

if __name__ == "__main__":之外还有其他选择吗?

这样我就可以让我的模块完全独立。
一种替代方法是使用子进程库并在没有 Windows 中多处理库使用的“生成”机制的情况下运行进程。但是,在进程之间共享信息时会产生一些开销,而多处理库可以更好地处理这些开销。

另一种选择是在我们的主应用程序中将

if __name__ == "__main__":

注入用户的字符串中。

    

python multiprocessing subprocess gil
1个回答
0
投票
if __name__

的一种解决方案是进行嵌套导入。我想通过多处理运行的函数隐藏在导入到我的主模块中的第二个模块中。

在此处查看此解决方案:

https://stackoverflow.com/a/29751273/4141279

© www.soinside.com 2019 - 2024. All rights reserved.