Maison >développement back-end >Tutoriel Python >Pourquoi est-ce que je reçois une RuntimeError sous Windows lors de l'utilisation du multitraitement ?
RuntimeError sous Windows lors de l'utilisation du multitraitement
La rencontre d'une « RuntimeError » lors de la tentative d'utilisation du multitraitement sous Windows indique un problème potentiel avec le démarrage du programme phase. Cette erreur se produit généralement lorsque le module principal lance des sous-processus sans utiliser le langage approprié.
Pour résoudre ce problème, assurez-vous que le module principal inclut la ligne suivante avant de lancer des sous-processus :
if __name__ == '__main__': freeze_support()
Exemple de code
Considérez l'extrait de code simplifié suivant qui tente d'utiliser le multitraitement dans des modules séparés sous Windows :
testMain.py (module principal)
import parallelTestModule extractor = parallelTestModule.ParallelExtractor() extractor.runInParallel(numProcesses=2, numThreads=4)
parallelTestModule.py (module séparé)
import multiprocessing from multiprocessing import Process import threading class ThreadRunner(threading.Thread): def __init__(self, name): threading.Thread.__init__(self) self.name = name def run(self): print(self.name, '\n') class ProcessRunner: def runp(self, pid, numThreads): mythreads = [] for tid in range(numThreads): name = "Proc-"+str(pid)+"-Thread-"+str(tid) th = ThreadRunner(name) mythreads.append(th) for i in mythreads: i.start() for i in mythreads: i.join() class ParallelExtractor: def runInParallel(self, numProcesses, numThreads): myprocs = [] prunner = ProcessRunner() for pid in range(numProcesses): pr = Process(target=prunner.runp, args=(pid, numThreads)) myprocs.append(pr) for i in myprocs: i.start() for i in myprocs: i.join()
Solution appliquée
Pour corriger l'erreur d'exécution sur Windows, ajoutez le if name == '__main__': guard au module principal :
import parallelTestModule if __name__ == '__main__': extractor = parallelTestModule.ParallelExtractor() extractor.runInParallel(numProcesses=2, numThreads=4)
En complétant cette modification, le programme gérera correctement les sous-processus comme prévu sans déclencher l'erreur RuntimeError .
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!