gpt4 book ai didi

Windows 上的 python 多处理,如果 __name__ == "__main__"

转载 作者:太空狗 更新时间:2023-10-29 17:56:48 24 4
gpt4 key购买 nike

在 Windows 7(64 位)上运行 python 2.7。

在阅读库模块 multiprocessing 的文档时,它多次声明了 __main__ 模块的重要性,包括条件(尤其是在 Windows 中):

if __name__ == "__main__":
# create Process() here

我的理解是,您不想在模块的全局命名空间中创建 Process() 实例(因为当子进程导入模块时,他会无意中产生另一个)。

不过,我不必将流程管理器放在包执行层次结构的最顶层(在 PARENT 中执行)。只要我的 Process() 是在类方法中创建、管理和终止的,甚至是在函数闭包中。只是不在顶层模块命名空间中。

我是否正确理解此警告/要求?


编辑

在前两个回复之后,我添加了这句话。这是 2.7 文档中 第 16.6 节多处理 的介绍。

Note: Functionality within this package requires that the __main__ module be importable by the children. This is covered in Programming guidelines however it is worth pointing out here.This means that some examples, such as the multiprocessing.Pool examples will not work in the interactive interpreter...

最佳答案

您不必从模块的“顶级”调用 Process()。从类方法调用 Process 是完全没问题的。

唯一需要注意的是,当导入模块 时,您不能允许调用Process()

由于 Windows 没有fork,多处理模块启动一个新的 Python 进程并导入调用模块。如果 Process() 在导入时被调用,那么这将引发无限连续的新进程(或直到您的机器耗尽资源)。这就是在

中隐藏对 Process() 的调用的原因
if __name__ == "__main__"

因为此 if 语句 中的语句不会在导入时被调用。

关于Windows 上的 python 多处理,如果 __name__ == "__main__",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20222534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com