作者: | 来源:互联网 | 2023-09-15 19:14
参见英文答案>WhydoesPython’smultiprocessingmoduleimport__main__whenstartinganewprocess
参见英文答案 > Why does Python’s multiprocessing module import __main__ when starting a new process on Windows?                                    1个
def sample():
pass
Process(target=sample).start()
Process(target=sample).start()
上面的代码失败并出现错误:
An attempt has been made to start a new process before the current
process has finished its bootstrapping phase. This probably means that
you are not using fork to start your child processes and you have
forgotten to use the proper idiom in the main module
但是这段代码运行良好:
def sample():
pass
if __name__ == '__main__':
Process(target=sample).start()
Process(target=sample).start()
在这种情况下,为什么主模块会影响我的代码执行?我无法正确理解错误消息.
注意:我经历了What does if __name__ == “__main__”: do?,但无法理解它与我的代码的相关性.
解决方法:
创建新的子进程时,子进程可能(主要取决于您使用的操作系统)重新导入当前模块.
在您的情况下,重新导入模块也会执行以下两行:
Process(target=sample).start()
Process(target=sample).start()
会发生什么,错误消息告诉你:
An attempt has been made to start a new process before the current process has finished its bootstrapping phase. This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module
在为第一个子进程设置适当的环境时,代码会尝试分叉另一个子进程.经理检测到这一点并告诉你这不行.
if __name__ == '__main__':
Process(target=sample).start()
Process(target=sample).start()
是一个保护条件,允许将当前模块导入子模块而不会出现此问题,因为只有–well–主模块的名称是__main__.