Windows-Multiprocessing-Fehler: RuntimeError
Beim Versuch, Multiprocessing unter Windows zu nutzen, kann bei Benutzern der folgende Fehler auftreten:
RuntimeError: Attempt to start a new process before the current process has finished its bootstrapping phase.
Dieser Fehler tritt auf, weil Windows-Unterprozesse das Hauptmodul bei der Initialisierung importieren, was möglicherweise zur rekursiven Erstellung von Unterprozessen führt. Um dies zu vermeiden, ist es wichtig, einen if __name__ == '__main__': Guard in das Hauptmodul einzufügen. Dies verhindert die Erstellung von Unterprozessen innerhalb des Hauptmoduls.
Betrachten Sie den folgenden Codeausschnitt, der das Problem veranschaulicht:
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()
Um diesen Fehler zu beheben, ändern Sie das testMain.py-Skript so, dass es if __name__ == '__main__': Guard:
enthältimport parallelTestModule if __name__ == '__main__': extractor = parallelTestModule.ParallelExtractor() extractor.runInParallel(numProcesses=2, numThreads=4)
Diese Änderung stellt sicher, dass die Unterprozesse nicht rekursiv erstellt werden, wodurch der RuntimeError auf Windows-Maschinen behoben wird.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Meldung „RuntimeError: Versuch, einen neuen Prozess zu starten, bevor der aktuelle Prozess seine Bootstrapping-Phase abgeschlossen hat', wenn ich Multiprocessing unter Windows verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!