Heim >Backend-Entwicklung >Python-Tutorial >Wie implementiert man Parallelität in Python: Mehrkernleistung freisetzen?

Wie implementiert man Parallelität in Python: Mehrkernleistung freisetzen?

DDD
DDDOriginal
2024-10-22 20:05:01979Durchsuche

How to Implement Parallelism in Python: Unleashing Multi-Core Power?

Frage: Parallelität in Python nutzen

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.

Antwort: Entfesseln Sie parallele Leistung mit dem Multiprocessing-Modul

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!

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