Windows 上的 python 多处理,如果 __name__ == "__main__"
- 2025-02-20 09:23:00
- admin 原创
- 26
问题描述:
在 Windows 7(64 位)上运行 python 2.7。
阅读库模块的文档时multiprocessing
,它多次指出了该__main__
模块的重要性,包括条件(尤其是在 Windows 中):
if __name__ == "__main__":
# create Process() here
我的理解是,您不想在模块的全局命名空间中创建 Process() 实例(因为当子进程导入该模块时,他会无意中产生另一个实例)。
不过,我不必将进程管理器放在我的包执行层次结构的最顶层(在 PARENT 中执行)。只要我的 Process() 是在类方法中创建、管理和终止的,甚至在函数闭包中。只是不在顶层模块命名空间中。
我是否正确理解了这个警告/要求?
编辑
在前两个回复之后,我添加了此引文。这是2.7 文档中第 16.6 节多处理的介绍。
注意:此包中的功能要求
__main__
模块可由子模块导入。这在编程指南中有所介绍,但值得在此指出。这意味着某些示例(例如multiprocessing.Pool
示例)将无法在交互式解释器中使用...
解决方案 1:
您不必Process()
从模块的“顶层”调用。Process
从类方法调用也是完全没问题的。
唯一需要注意的是,如果或者当模块被导入时,你不能允许Process()
它被调用。
由于 Windows 没有fork
,多处理模块会启动一个新的 Python 进程并导入调用模块。如果在导入时被调用,那么这将引发无限连续的新进程(或直到您的机器耗尽资源)。这就是隐藏对内部Process()
调用的原因Process()
if __name__ == "__main__"
因为其中的语句if-statement
在导入时不会被调用。
解决方案 2:
__name__
`"__main__"只有在脚本直接执行时(通过
python foo.py或 )才等于
python -m foo。这*确保*
Process()`如果脚本作为模块导入,则不会调用。
相关推荐
热门文章
项目管理软件有哪些?
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
热门标签
云禅道AD