Где поставить freeze_support() в Python script?

Я запутался в использовании freeze_support() для multiprocessing и я получаю Runtime Error без нее. Я только запускаю скрипт, а не определяю функцию или модуль. Могу ли я все еще использовать это? Или пакеты, которые я импортирую, должны были использовать это?

Вот документация.

Обратите внимание, что конкретная проблема scikit-learn вызовом GridSearchCV scikit-learn GridSearchCV который пытается порождать процессы параллельно. Я не уверен, должен ли мой скрипт быть заморожен для этого, или какой-то код, который вызвал (из дистрибутива Anaconda). Если детали имеют отношение к этому вопросу, пожалуйста, перейдите к более конкретному вопросу.

Ответ 1

В Windows все вашего кода multiprocessing -using должен быть защищен if __name__ == "__main__":

Итак, чтобы быть в безопасности, я бы поместил весь ваш код на верхнем уровне вашего script в функцию main(), а затем просто сделаю это на верхнем уровне:

if __name__ == "__main__":
    main()

См. раздел "Безопасный импорт основного модуля" здесь для объяснения, почему это необходимо. Вероятно, вам вообще не нужно называть freeze_support, хотя это не помешает включить его.

Обратите внимание, что в любом случае рекомендуется использовать if __name__ == "__main__" guard для скриптов, так что код не будет неожиданно выполнен, если вы обнаружите, что вам нужно import ваш script в другой script в какой-то момент будущее.