Führen Sie eine parallele Verarbeitung in Python durch

Najwa Riyaz 30 Januar 2023
  1. Verwenden Sie den Verarbeitungspool und seine Methoden, um Multiprocessing in Python durchzuführen
  2. Verwenden Sie die Funktion apply_async(), um Multiprocessing in Python durchzuführen
  3. Verwenden Sie die Funktionen map() und map_sync(), um Multiprocessing in Python durchzuführen
Führen Sie eine parallele Verarbeitung in Python durch

In diesem Artikel wird erläutert, wie Sie mehrere Prozesse in Python parallel ausführen.

Verwenden Sie den Verarbeitungspool und seine Methoden, um Multiprocessing in Python durchzuführen

Führen Sie die folgenden Schritte aus, um Multiprocessing in Python durchzuführen.

  • Importieren Sie zunächst das Modul multiprocessing.
  • Verwenden Sie die Klasse Pool, um den Python Processing Pool zu definieren. Dieser Pool stellt einen Pool von Worker-Prozessen dar. Nehmen Sie das folgende Code-Snippet als Beispiel.
Pool(processes=n)

Dementsprechend erlaubt die Klasse Pool die gleichzeitige Ausführung n von Prozessen. Diese Klasse enthält Methoden, die die Delegation von Aufgaben an die Worker-Prozesse des Pools ermöglichen.

Im Folgenden sind einige der Methoden der Klasse Pool aufgeführt.

  • Pool.map() - Verwenden Sie diese Blockierungsmethode des Pools, um zu blockieren, bis das Ergebnis fertig ist. Diese Methode zerhackt den zugehörigen iterierbaren in mehrere Chunks. Anschließend übergibt es die Blöcke als separate Aufgaben an den Prozesspool.

  • Verwenden Sie die folgenden nicht blockierenden Methoden der Klasse Pool, um die Prozesse gleichzeitig auf einmal zu übermitteln. Verwenden Sie die Methode get(), um die Ergebnisse der Funktion zu erhalten.

  • Pool.apply_async()

  • Pool.map_async()

Um die Anzahl der Prozesse zu bestimmen, die Ihr Computer für Multiprocessing verarbeiten kann, sollten Sie die Anzahl der Prozessoren in Ihrem Gerät kennen. Sie können dies überprüfen, indem Sie den folgenden Code verwenden.

import multiprocessing as mp

print("Number of processors: ", mp.cpu_count())

Ausgabe:

Number of processors:  4

Verwenden Sie die Funktion apply_async(), um Multiprocessing in Python durchzuführen

Hier ist ein Beispiel, das Multiprocessing unter Verwendung des Verarbeitungspools in Python demonstriert, während das Quadrat eines Bereichs für Zahlen von 0-9 bestimmt wird.

Beachten Sie, dass wir hier sogar den Namen des Prozessarbeiters gedruckt haben, was optional ist.

from multiprocessing import Pool
from multiprocessing import Process, current_process
import time
from time import sleep
import random


def fnc_square(x):
    print(current_process().name)
    return x * x


if __name__ == "__main__":
    pool = Pool(processes=4)
    result = pool.apply_async(fnc_square, [6])
    print(result.get(timeout=1))
    print(pool.map(fnc_square, range(10)))

Ausgabe:

SpawnPoolWorker-1
36
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Verwenden Sie die Funktionen map() und map_sync(), um Multiprocessing in Python durchzuführen

Die Funktion map_async ist nicht-blockierend, während die Funktion map blockiert. Unten ist ein Beispiel, das den Unterschied zwischen diesen beiden Befehlen demonstriert.

from multiprocessing import Pool
import time


def f(x):
    print(x * x)


if __name__ == "__main__":
    pool = Pool(processes=1)
    pool.map(f, range(10))
    r = pool.map_async(f, range(10))
    print("First print")
    print("Second print")
    r.wait()
    print("Third print")

Hier können wir beobachten, dass die Funktion pool.map() wartet, bis die 10 Operationsaufrufe abgeschlossen sind. Daher sehen wir das Ergebnis der Reihe nach gedruckt.

Zusätzlich führt pool.map_async() die 10 Funktionsaufrufe asynchron aus. Wenn die Funktion r.wait() aufgerufen wird, blockiert sie den Prozessor für die Ausführung. Daher sehen wir in der Ausgabe die Drucknachrichten als First print und Second print dazwischen, aber der Third print steht immer am Ende.

Ausgabe:

0
1
4
9
16
25
36
49
64
81
First print
Second print
0
1
4
9
16
25
36
49
64
81
Third print

Verwandter Artikel - Python Process