在Python脚本中应该在哪里放置freeze_support()?

68 投票
1 回答
88220 浏览
提问于 2025-04-18 10:49

我对在使用 multiprocessing 时,为什么要用 freeze_support() 感到困惑。如果不使用它,我会遇到 Runtime Error。我只是运行一个脚本,并没有定义函数或模块。我还可以使用它吗?还是说我导入的包应该使用它?

这里有相关的文档。

需要注意的是,具体问题是关于 scikit-learn 调用 GridSearchCV,这个过程会尝试并行生成多个进程。我不确定我的脚本是否需要被“冻结”,还是说某些被调用的代码(来自 Anaconda 发行版)需要。如果这些细节对这个问题有帮助,请去更具体的 问题 看看。

1 个回答

113

在Windows系统上,使用多进程的代码必须放在 if __name__ == "__main__": 这个保护语句里。

为了安全起见,我建议把你脚本最上面的所有代码放到一个 main() 函数里,然后在脚本的最上面加上这段代码:

if __name__ == "__main__":
    main()

想了解为什么这样做是必要的,可以查看“安全导入主模块”这个小节,链接在这里。不过,你可能根本不需要调用 freeze_support,加上它也不会有什么坏处。

另外,使用 if __name__ == "__main__" 这个保护语句是一个好习惯,这样如果将来你需要把你的脚本导入到另一个脚本中时,就不会出现意外执行的情况。

撰写回答