将freeze_support()放在Python脚本中的位置?

Lás*_*zló 23 python runtime-error multiprocessing scikit-learn anaconda

我对使用freeze_support()而感到困惑multiprocessing,Runtime Error没有它就得到了.我只运行脚本,而不是定义函数或模块.我还能用吗?或者我导入的软件包应该使用它吗?

是文档.

请注意,具体问题是关于scikit-learn调用GridSearchCV哪些尝试并行生成进程.我不确定我的脚本是否需要为此冻结,或者是一些被调用的代码(来自Anaconda发行版).如果详细信息与此问题相关,请转到更具体的问题.

dan*_*ano 47

在Windows上,您的所有multiprocessing使用代码都必须受到保护if __name__ == "__main__":

因此,为了安全起见,我会将当前所有代码放在脚本的顶层main()函数中,然后在顶层执行此操作:

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

请参阅此处的 "主要模块的安全导入"子部分,以解释为何需要这样做.你可能根本不需要打电话freeze_support,但包含它不会伤害任何东西.

请注意,if __name__ == "__main__"无论如何最好使用guard作为脚本,因此如果您import在将来某个时候发现需要将脚本放入另一个脚本中,则不会意外执行代码.

  • 这个没有涉及的唯一场景是当有人创建一个继承自Process的对象时,即:class myProcess(Process),你在那个场景中放置了freeze_support? (4认同)
  • 谢谢。在 `if __name__ == "__main__":` 中不使用多处理的错误让我感到惊讶。尽管我总是在“if”子句中使用多处理函数,但我不知道多处理要求。这是我第一次使用“if”子句之外的代码,它给出了错误“RuntimeError:尝试在当前进程完成引导阶段之前启动新进程” (2认同)