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

Barbara Streisand
Freigeben: 2024-11-16 10:43:03
Original
551 Leute haben es durchsucht

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()
Nach dem Login kopieren

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)
Nach dem Login kopieren

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()
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage