Maison > développement back-end > Tutoriel Python > Pourquoi est-ce que j'obtiens « RuntimeError : Tentative de démarrage d'un nouveau processus... » lors de l'utilisation du multitraitement en Python sous Windows ?

Pourquoi est-ce que j'obtiens « RuntimeError : Tentative de démarrage d'un nouveau processus... » lors de l'utilisation du multitraitement en Python sous Windows ?

DDD
Libérer: 2024-11-19 08:12:03
original
503 Les gens l'ont consulté

Why Do I Get

Erreurs d'exécution dans le multitraitement Python sous Windows

Lors de l'exécution de code multitraitement sur les systèmes d'exploitation Windows, vous pouvez rencontrer le message d'erreur suivant :

RuntimeError:
            Attempt to start a new process before the current process
            has finished its bootstrapping phase.
            This probably means that you are on Windows and you have
            forgotten to use the proper idiom in the main module:
                if __name__ == '__main__':
                    freeze_support()
                    ...
            The "freeze_support()" line can be omitted if the program
            is not going to be frozen to produce a Windows executable.
Copier après la connexion

Cause de l'erreur

Sous Windows, les sous-processus créés via le module multitraitement hériteront de l'environnement du processus principal. Lorsqu'un sous-processus est lancé, il tentera d'importer le module principal, ce qui peut conduire à une exécution récursive du code. Pour éviter cela, vous devez ajouter un garde if __name__ == '__main__' au module principal.

Solution

Pour résoudre le problème, modifiez le module principal comme suit :

import parallelTestModule

if __name__ == '__main__':    
    extractor = parallelTestModule.ParallelExtractor()
    extractor.runInParallel(numProcesses=2, numThreads=4)
Copier après la connexion

Explication

La condition if __name__ == '__main__' vérifie si le code est exécuté directement à partir du module principal. Si cette condition est remplie, cela signifie que le script n'est pas importé par un autre module. Dans ce cas, vous pouvez créer en toute sécurité des sous-processus dans le module principal, car cela garantit que le code ne sera pas exécuté de manière récursive.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal