【发布时间】:2014-10-31 17:52:51
【问题描述】:
如果我有以下代码:
def f():
print 'ok!'
import sys
sys.exit()
if __name__=='__main__':
import billiard
billiard.forking_enable(0)
p = billiard.Process( target=f)
p.start()
while p.is_alive():
pass
脚本按预期运行,打印“ok!”和结束。但是如果我省略if __name__=='__main__': 行并取消缩进以下行,我的机器(OS X)就会发疯,不断产生大量Python 进程,直到我killall Python。知道这里发生了什么吗?
(对于那些将其标记为重复的人,请注意,虽然另一个问题通常询问 if __name__=='__main__' 的用途,但我特意问的是为什么在此处未使用它会导致严重的意外行为)
【问题讨论】:
-
推测,
billiard在运行时正在导入您的代码,这(如果省略了守卫)会导致billiard再次运行,导入您的模块,导致billiard再次运行,导入。 ..
标签: python main python-multiprocessing