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

时间:2018-06-10 06:47:49

标签: python python-multiprocessing

我正在编写一个类,它支持易于使用的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)。它会照常工作吗?

2 个答案:

答案 0 :(得分:1)

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

要从上面的评论中回答你的问题,我认为将它包含在类方法中是有意义的,因为它是顶级构造,所以它总是加载。

答案 1 :(得分:1)

multiprocessing guidelines标题“安全导入主模块”中所述,某些形式的多处理需要导入主模块,因此如果fork bomb,您的程序可能会在fork中运行。 {1}}缺少检查。特别是,在Windows上,CPython不能{{3}}。所以跳过它是不安全的。测试属于模块的顶级(全局)级别,而不属于某个类。它的目的是阻止模块在导入时自动运行任务(而不是定义类,函数等),而不是直接运行。