Python 为什么这个多处理代码会失败?

Python 为什么这个多处理代码会失败?,python,Python,上述代码失败并出现错误: 已尝试在当前进程之前启动新进程 进程已完成其引导阶段。这可能意味着 您没有使用fork启动子进程,并且 忘记在主模块中使用正确的习惯用法 但这段代码运行良好: def sample(): pass Process(target=sample).start() Process(target=sample).start() 在这种情况下,为什么主模块会影响我的代码执行?我无法正确理解错误消息 注意:我已经看过了,但无法理解它与我的代码的相关性。创建新的子进程时,

上述代码失败并出现错误:

已尝试在当前进程之前启动新进程 进程已完成其引导阶段。这可能意味着 您没有使用fork启动子进程,并且 忘记在主模块中使用正确的习惯用法

但这段代码运行良好:

def sample():
    pass

Process(target=sample).start()
Process(target=sample).start()
在这种情况下,为什么主模块会影响我的代码执行?我无法正确理解错误消息


注意:我已经看过了,但无法理解它与我的代码的相关性。

创建新的子进程时,子进程可能(主要取决于您使用的操作系统)重新导入当前模块

在您的情况下,重新导入模块也会执行以下两行:

def sample():
    pass
if __name__ == '__main__':
    Process(target=sample).start()
    Process(target=sample).start()
发生的情况是,错误消息告诉您:

试图在当前进程完成引导阶段之前启动新进程。这可能意味着您没有使用fork启动子进程,并且忘记了在主模块中使用正确的习惯用法

在为您的第一个子进程设置适当的环境时,代码会尝试派生另一个子进程。经理检测到这一点,并告诉您这不好

Process(target=sample).start()
Process(target=sample).start()

是一种保护条件,允许在子模块中导入当前模块而不会出现此问题,因为只有--well--main模块的名称是
\uuuuuu main\uuuu

,因此无法在juputer笔记本中编码?有什么方法可以使用笔记本吗?
if __name__ == '__main__':
    Process(target=sample).start()
    Process(target=sample).start()