Pourquoi est-ce que j'obtiens « RuntimeError : Tentative de démarrage d'un nouveau processus avant que le processus en cours n'ait terminé sa phase d'amorçage » lorsque j'utilise le multitraitement sous Windows ?

Mary-Kate Olsen
Libérer: 2024-11-21 06:26:10
original
546 Les gens l'ont consulté

Why am I getting

Erreur de multitraitement Windows : RuntimeError

Lorsqu'ils tentent d'utiliser le multitraitement sous Windows, les utilisateurs peuvent rencontrer l'erreur suivante :

RuntimeError:
Attempt to start a new process before the current process
has finished its bootstrapping phase.
Copier après la connexion

Cette erreur se produit car les sous-processus Windows importent le module principal lors de l'initialisation, conduisant potentiellement à la création récursive de sous-processus. Pour éviter cela, il est crucial d'inclure un if __name__ == '__main__': guard dans le module principal. Cela empêche la création de sous-processus à partir du module principal.

Considérez l'extrait de code suivant, qui illustre le problème :

testMain.py :

import parallelTestModule

extractor = parallelTestModule.ParallelExtractor()
extractor.runInParallel(numProcesses=2, numThreads=4)
Copier après la connexion

parallelTestModule.py :

import multiprocessing
from multiprocessing import Process

class ParallelExtractor:
    def runInParallel(self, numProcesses, numThreads):
        myprocs = []
        for pid in range(numProcesses):
            pr = Process(target=self.runp, args=(pid, numThreads))
            myprocs.append(pr)

        for i in myprocs:
            i.start()

        for i in myprocs:
            i.join()
Copier après la connexion

Pour résoudre cette erreur, modifiez le script testMain.py pour inclure le if __name__ == '__main__': guard:

import parallelTestModule

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

Cette modification garantit que les sous-processus ne sont pas créés de manière récursive, résolvant ainsi l'erreur RuntimeError sur les machines Windows.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal