Heim >Backend-Entwicklung >Python-Tutorial >Wie implementiert man Parallelität in Python: Mehrkernleistung freisetzen?
In C bietet OpenMP robuste Unterstützung für parallele Programmierung. Allerdings fehlt Python dieses praktische Tool. Wie erreichen wir Parallelität in Python-Programmen, insbesondere in Szenarien, in denen unabhängige Funktionen eine Parallelisierung erfordern?
Bedenken Sie die folgende Codestruktur:
<code class="python">solve1(A) solve2(B)</code>
Wobei „solve1“ und „solve2“ unabhängige Funktionen sind. Ziel ist es, diesen Code parallel auszuführen und so die Ausführungszeit zu minimieren.
Sehen wir uns das bereitgestellte Code-Snippet an:
<code class="python">def solve(Q, G, n): i = 0 tol = 10 ** -4 while i < 1000: inneropt, partition, x = setinner(Q, G, n) outeropt = setouter(Q, G, n) if (outeropt - inneropt) / (1 + abs(outeropt) + abs(inneropt)) < tol: break node1 = partition[0] node2 = partition[1] G = updateGraph(G, node1, node2) if i == 999: print "Maximum iteration reaches" print inneropt</code>
Wir zielen darauf ab, die Setinner- und Setouter-Funktionen zu parallelisieren.
Das Multiprocessing-Modul bietet eine leistungsstarke Lösung für die parallele Programmierung in Python. Es ermöglicht uns, mehrere Prozesse zu erzeugen, die Aufgaben gleichzeitig ausführen können und dabei die Rechenleistung mehrerer CPU-Kerne nutzen.
Für den bereitgestellten Code kann ein Verarbeitungspool eingesetzt werden. So geht's:
<code class="python">from multiprocessing import Pool pool = Pool() result1 = pool.apply_async(solve1, [A]) # evaluate "solve1(A)" asynchronously result2 = pool.apply_async(solve2, [B]) # evaluate "solve2(B)" asynchronously answer1 = result1.get(timeout=10) answer2 = result2.get(timeout=10)</code>
Dieses Code-Snippet erstellt einen Pool von Prozessen, die die Funktionen „solve1“ und „solve2“ asynchron ausführen. Jeder CPU-Kern kann einen Prozess gleichzeitig ausführen, wodurch die Ausführungszeit effektiv verkürzt wird.
Eine alternative Möglichkeit, Aufgaben zu parallelisieren, ist die Verwendung der Map-Funktion:
<code class="python">args = [A, B] results = pool.map(solve1, args)</code>
Dieser Ansatz wendet die Funktion „solve1“ an jedes Element in der args-Liste parallel.
Es ist jedoch wichtig zu beachten, dass Threads nicht für die parallele Programmierung in Python verwendet werden sollten. Dies liegt daran, dass die GIL (Global Interpreter Lock) verhindert, dass mehrere Threads gleichzeitig Python-Bytecode ausführen, wodurch alle potenziellen Vorteile der Parallelität im Wesentlichen zunichte gemacht werden.
Das obige ist der detaillierte Inhalt vonWie implementiert man Parallelität in Python: Mehrkernleistung freisetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!