def sample():
pass
Process(target=sample).start()
Process(target=sample).start()
上面的代码失败并出现错误:
已尝试在当前进程之前启动新进程
进程已完成其引导阶段。这可能意味着
您没有使用 fork 来启动您的子进程,并且您有
忘记在主模块中使用正确的习惯用法
但这段代码运行良好:
def sample():
pass
if __name__ == '__main__':
Process(target=sample).start()
Process(target=sample).start()
在这种情况下,为什么主模块会影响我的代码执行?我无法正确理解错误消息。
注:我经历过if __name__ == "__main__": 会做什么? https://stackoverflow.com/questions/419163/what-does-if-name-main-do但无法理解它与我的代码的相关性。
当您创建一个新的子进程时,该子进程might(主要取决于您使用的操作系统)重新导入当前模块。
在您的情况下,重新导入模块也会执行这两行:
Process(target=sample).start()
Process(target=sample).start()
发生的情况是,错误消息告诉您:
在当前进程完成其引导阶段之前,已尝试启动新进程。这可能意味着您没有使用 fork 来启动子进程,并且您忘记了在主模块中使用正确的习惯用法
在为第一个子进程设置适当的环境时,代码尝试分叉另一个子进程。经理发现了这一点并告诉您这是不行的。
if __name__ == '__main__':
Process(target=sample).start()
Process(target=sample).start()
is a 守卫状态允许在子模块中导入当前模块而不会出现此问题,因为只有 --well-- 主模块的名称是__main__
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)