Führen Sie eine parallele Verarbeitung in Python durch
- Verwenden Sie den Verarbeitungspool und seine Methoden, um Multiprocessing in Python durchzuführen
-
Verwenden Sie die Funktion
apply_async()
, um Multiprocessing in Python durchzuführen -
Verwenden Sie die Funktionen
map()
undmap_sync()
, um Multiprocessing in Python durchzuführen
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 Methodeget()
, 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