So parallelisieren Sie eine Python-Schleife für Multicore-Leistung
Frage:
Für eine CPU -gebundene Python-Schleife: Wie können wir die Vorgänge effektiv parallelisieren, um die Leistungsfähigkeit mehrerer zu nutzen? Kerne?
Antwort:
Der Python-Interpreter erzwingt eine Global Interpreter Lock (GIL), die die gleichzeitige Ausführung von Python-Code durch Threads desselben Interpreters verhindert. Daher ist für CPU-gebundene Aufgaben die Verwendung mehrerer Prozesse anstelle von Threads effizienter.
Parallelisierung mit Prozesspools:
Python bietet zwei unkomplizierte Methoden zum Erstellen von Prozesspools :
pool = multiprocessing.Pool(4) out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
Dieser Ansatz nutzt das Multiprocessing-Modul und ermöglicht die direkte Kontrolle über die Thread-Anzahl. Es kann jedoch zu Problemen im interaktiven Interpreter kommen.
with concurrent.futures.ProcessPoolExecutor() as pool: out1, out2, out3 = zip(*pool.map(calc_stuff, range(0, 10 * offset, offset)))
Diese Methode verwendet Concurrent .futures.ProcessPoolExecutor und arbeitet auf dem Multiprocessing-Modul und bietet ähnliches Funktionalität.
Beide Methoden erreichen Parallelisierung durch die Verteilung von Schleifeniterationen auf separate Prozesse, wodurch die Leistung für CPU-gebundene Berechnungen erheblich verbessert wird.
Das obige ist der detaillierte Inhalt vonWie kann ich eine CPU-gebundene Python-Schleife für Multicore-Leistung parallelisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!