【发布时间】:2013-12-11 22:02:11
【问题描述】:
在 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示例在 交互式解释器...
【问题讨论】:
-
迂腐提示:当代码实际运行时,
if __name__ == '__main__':中的变量仍在模块的 命名空间 中。但是,在导入模块时不会执行代码。 (即,我相信如果您导入程序的主模块,您可以从其主块中检索变量作为模块属性。) -
所以在
if中创建的@millimoose 变量可供Windows 机器上的所有衍生进程访问,对吗?即使它们没有在if之外声明? -
@Kartik - 我不确定我是否理解这个问题,反正已经三年了。我认为它们将是可访问的,但它们的值将是虚假的。我建议您编写一些测试代码来找出您的想法,如果您有任何具体问题,请在 SO 上发布一个新问题。