我正在编写一个类,它支持易于使用的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)
。它会照常工作吗?
答案 0 :(得分:1)
if __name__ == '__main__':
用于指示加载模块时要运行的代码。基本上,当您将其作为脚本运行或将其作为库导入时,它都会被加载。在第一种情况下,通常会编写它以便所有编写的代码都执行,因此不必包含它。但是当你编写一个库时,可能会有一些代码,当其他人导入它时你不会运行它们,例如一个简短的例子或测试。所以在后一种情况下,你肯定想要包含它。
要从上面的评论中回答你的问题,我认为将它包含在类方法中是有意义的,因为它是顶级构造,所以它总是加载。
答案 1 :(得分:1)
如multiprocessing guidelines标题“安全导入主模块”中所述,某些形式的多处理需要导入主模块,因此如果fork bomb,您的程序可能会在fork中运行。 {1}}缺少检查。特别是,在Windows上,CPython不能{{3}}。所以跳过它是不安全的。测试属于模块的顶级(全局)级别,而不属于某个类。它的目的是阻止模块在导入时自动运行任务(而不是定义类,函数等),而不是直接运行。