Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erhalte ich unter Windows einen RuntimeError, wenn ich Multiprocessing verwende?

Warum erhalte ich unter Windows einen RuntimeError, wenn ich Multiprocessing verwende?

Barbara Streisand
Barbara StreisandOriginal
2024-11-16 10:43:03553Durchsuche

Why Am I Getting a RuntimeError on Windows When Using Multiprocessing?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn