web-dev-qa-db-fra.com

où mettre freeze_support () dans un script Python?

Je suis confus quant à l'utilisation de freeze_support() pour multiprocessing et j'obtiens un Runtime Error sans ça. Je ne fais qu'exécuter un script, pas définir une fonction ou un module. Puis-je encore l'utiliser? Ou les packages que j'importe auraient dû l'utiliser?

Ici est la documentation.

Notez que le problème spécifique concerne scikit-learn appelant GridSearchCV qui essaie de générer des processus en parallèle. Je ne sais pas si mon script doit être gelé pour cela, ou le code appelé (de la distribution Anaconda). Si les détails sont pertinents pour cette question, veuillez vous diriger vers le plus spécifique question .

21
László

Sous Windows tous votre multiprocessing- code utilisant doivent être protégés par if __name__ == "__main__":

Donc, pour être sûr, je mettrais tout votre code actuellement au niveau supérieur de votre script dans une fonction main(), puis je ferais cela au niveau supérieur:

if __name__ == "__main__":
    main()

Voir la sous-section "Importation sûre du module principal" ici pour une explication de la raison pour laquelle cela est nécessaire. Vous n'avez probablement pas besoin d'appeler freeze_support, Bien que cela ne fasse rien de mal à l'inclure.

Notez qu'il est préférable d'utiliser de toute façon la garde if __name__ == "__main__" Pour les scripts, afin que le code ne soit pas exécuté de manière inattendue si vous trouvez que vous avez besoin de import votre script dans un autre script à un moment donné de la futur.

45
dano