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

时间:2014-06-23 19:58:07

标签: python runtime-error multiprocessing scikit-learn anaconda

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

Here是文档。

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

1 个答案:

答案 0 :(得分:40)

multiprocessing的Windows 全部上 - 使用代码必须由if __name__ == "__main__":

保护

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

if __name__ == "__main__":
    main()

参见"安全导入主模块"第here小节,解释为什么这是必要的。你可能根本不需要打电话给freeze_support,虽然它不会伤害任何东西而包含它。

请注意,无论如何最好使用if __name__ == "__main__"守护脚本,以便在您发现需要import脚本进入另一个代码时,代码不会意外执行脚本在未来的某个时刻。