Heim > Artikel > Backend-Entwicklung > Warum erhalte ich unter Windows einen RuntimeError, wenn ich Multiprocessing verwende?
RuntimeError unter Windows bei Verwendung von Multiprocessing
Das Auftreten eines „RuntimeError“ beim Versuch, Multiprocessing unter Windows zu verwenden, weist auf ein potenzielles Problem mit dem Bootstrapping des Programms hin Phase. Dieser Fehler tritt normalerweise auf, wenn das Hauptmodul Unterprozesse initiiert, ohne die richtige Redewendung zu verwenden.
Um dieses Problem zu beheben, stellen Sie sicher, dass das Hauptmodul die folgende Zeile enthält, bevor Sie Unterprozesse starten:
if __name__ == '__main__': freeze_support()
Codebeispiel
Betrachten Sie den folgenden vereinfachten Codeausschnitt, der versucht, Multiprocessing in separaten Modulen zu nutzen Windows:
testMain.py (Hauptmodul)
import parallelTestModule extractor = parallelTestModule.ParallelExtractor() extractor.runInParallel(numProcesses=2, numThreads=4)
parallelTestModule.py (separates Modul)
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()
Angewandte Lösung
Um das zu beheben RuntimeError unter Windows: Fügen Sie den if name == '__main__': Guard zum Hauptmodul hinzu:
import parallelTestModule if __name__ == '__main__': extractor = parallelTestModule.ParallelExtractor() extractor.runInParallel(numProcesses=2, numThreads=4)
Durch Abschluss dieser Änderung wird das Programm Unterprozesse korrekt wie vorgesehen verarbeiten, ohne sie auszulösen der RuntimeError.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich unter Windows einen RuntimeError, wenn ich Multiprocessing verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!