Maison >développement back-end >Tutoriel Python >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 ?
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.
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)
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()
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)
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!