繁体   English   中英

在Python multiprocessing.Process中,我们是否必须使用`__name__ == __main__`?

[英]In Python multiprocessing.Process , do we have to use `__name__ == __main__`?

我正在编写一个支持易于使用的API的类,以添加不同的设置以运行给定程序( class.add(args) )并使用多处理程序对所有设置进行基准测试( class.benchmark(num_processes=5) )。

从multiprocessing.Process的文档中,似乎所有情况都使用if __name__ == '__main__' 跳过使用安全吗?

例如,类方法benchmark(num_processes=5)启动并加入进程,另一个python文件file.py创建一个类,只需调用class.benchmark(num_processes=5) 它会照常工作吗?

if __name__ == '__main__':用于指示加载模块时要运行的代码。 基本上,在将其作为脚本运行或作为库导入时都将其加载。 在第一种情况下,通常会编写它,以便所有编写的代码都能执行,因此不必包含它。 但是,当您编写库时,可能会有一些其他人导入时不会运行的代码,例如简短的示例或测试。 因此,在后一种情况下,您肯定要包括它。

为了从上面的评论中回答您的问题,我认为将它包含在类方法中没有意义,因为它是顶级构造,因此始终会加载。

多处理指南中 “安全导入主模块”标题下所述,某些形式的多处理需要导入主模块,因此,如果__name__ == '__main__'检查,则程序可能会在fork炸弹中运行。 特别是在Windows中,CPython无法进行分叉 因此,跳过它是不安全的。 测试属于模块的顶级(全局)级别,而不属于某些类。 其目的是阻止模块在导入时自动运行任务(与定义类,函数等相反),而不是直接运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM