Verstehen von Multi-Processing in Python: Eine vereinfachte Anleitung ⋆ ALexHost SRL

Testen Sie Ihre Fähigkeiten mit unseren Hosting-Diensten und erhalten Sie 15% Rabatt!

Code an der Kasse verwenden:

Skills
09.12.2024

Verstehen von Multi-Processing in Python: Eine vereinfachte Anleitung

Führen Sie ressourcenintensive Anwendungen oder Datenverarbeitungsaufgaben aus? Die Dedicated Server von AlexHost bieten die perfekte Umgebung, um die Leistung von Multiprocessing in Python zu nutzen. Mit Hochleistungs-CPUs, dedizierten Ressourcen und einer robusten Infrastruktur sorgt AlexHost dafür, dass Ihre Anwendungen auch bei hoher Rechenlast effizient laufen. Ganz gleich, ob Sie Daten verarbeiten, Simulationen durchführen oder Modelle für maschinelles Lernen einsetzen, die Lösungen von AlexHost sind darauf zugeschnitten, Ihre Produktivität zu maximieren.

Das Multiprocessing-Modul von Python ermöglicht es Ihnen, mehrere Prozesse gleichzeitig laufen zu lassen. Dadurch können Sie mehrere CPU-Kerne nutzen und die Leistung von CPU-gebundenen Aufgaben verbessern. Dies ist besonders nützlich, wenn Sie rechenintensive Aufgaben wie Datenverarbeitung, maschinelles Lernen oder Simulationen durchführen. In diesem Leitfaden wird vereinfacht erklärt, wie Multiprocessing in Python funktioniert und wie man es effektiv einsetzt.

Warum Multiprocessing verwenden?

Python verwendet eine globale Interpreter-Sperre (GIL), die es nur einem Thread erlaubt, Python-Bytecode zur gleichen Zeit auszuführen. Das macht es schwierig, Multithreading für CPU-gebundene Aufgaben zu verwenden, da immer nur ein Thread gleichzeitig laufen kann, selbst auf einem Mehrkernprozessor. Beim Multiprocessing hingegen wird für jeden Prozess ein eigener Speicherbereich geschaffen, so dass jeder Prozess parallel ausgeführt werden kann und mehrere CPU-Kerne voll ausgenutzt werden.

Hauptunterschiede zwischen Multiprocessing und Multithreading:

  • Multiprocessing: Verwendet separate Speicherbereiche für jeden Prozess, umgeht die GIL und ermöglicht echte Parallelität.
  • Multithreading: Teilt den Speicherplatz zwischen den Threads, ist aber durch die GIL in Python begrenzt und eignet sich daher besser für E/A-gebundene Aufgaben (wie das Lesen/Schreiben von Dateien oder Netzwerkanfragen).

Erste Schritte mit dem Multiprocessing-Modul

Das Multiprocessing-Modul von Python bietet verschiedene Möglichkeiten zur Erstellung und Verwaltung mehrerer Prozesse. Im Folgenden werden einige der wichtigsten Konzepte und deren Verwendung erläutert:

Importieren des Moduls

Um Multiprocessing zu verwenden, importieren Sie das Modul:

importieren Sie multiprocessing

Grundlegende Konzepte von Multiprocessing

  1. Prozess: Ein Prozess ist eine unabhängige Instanz eines Programms. Im Kontext von Python hat jeder Prozess seinen eigenen Speicherbereich.
  2. Pool: Mit einem Pool können Sie mehrere Prozesse mit einer festen Anzahl von Arbeitsprozessen verwalten.
  3. Warteschlange: Eine Warteschlange wird für die Kommunikation zwischen Prozessen verwendet.
  4. Sperre: Eine Sperre wird verwendet, um zu verhindern, dass Prozesse gleichzeitig auf gemeinsame Ressourcen zugreifen.

Beispiel 1: Erstellen eines einfachen Prozesses

Die einfachste Art, einen Prozess zu erstellen, ist die Verwendung der Klasse Process. Hier ist ein einfaches Beispiel:

from multiprocessing import Process

def print_numbers():
for i in range(5):
print(f "Number: {i}")
if __name__ == "__main__":
# Erstelle einen Prozess
process = Process(target=print_numbers)
# Starten des Prozesses
process.start()
# Warten, bis der Prozess abgeschlossen ist
process.join()
print("Prozess abgeschlossen.")

  • Prozess: Die Klasse Process wird verwendet, um einen neuen Prozess zu erstellen.
  • ziel: Das Argument target gibt die Funktion an, die der Prozess ausführen soll.
  • start(): Startet den Prozess.
  • join(): Wartet auf die Beendigung des Prozesses, bevor es mit dem Rest des Codes weitergeht.

In diesem Beispiel wird die Funktion print_numbers in einem separaten Prozess ausgeführt, so dass das Hauptprogramm gleichzeitig laufen kann.

Beispiel 2: Verwendung von multiprocessing.Pool

Die Klasse Pool ist nützlich, wenn Sie einen Pool von Arbeitsprozessen verwalten und eine Funktion auf mehrere Datenelemente parallel anwenden wollen. Hier ist ein Beispiel:

from multiprocessing import Pool

def square_number(n):
return n * n

if __name__ == "__main__":
# Erstelle einen Pool mit 4 Prozessen
with Pool(4) as pool:
numbers = [1, 2, 3, 4, 5]
# Verwenden Sie pool.map(), um die Funktion auf jedes Element in der Liste anzuwenden
ergebnisse = pool.map(Quadratzahl, Zahlen)

print(f “Quadratzahlen: {Ergebnisse}”)

  • Pool: Erzeugt einen Pool von Arbeitsprozessen. In diesem Fall werden 4 Prozesse erstellt.
  • map(): Die map-Funktion nimmt eine Funktion und eine Iterable (wie eine Liste) und wendet die Funktion auf jedes Element parallel an.

In diesem Beispiel wird jede Zahl in der Zahlenliste mit 4 parallelen Prozessen quadriert. Die Funktion pool.map() teilt die Arbeit auf die verfügbaren Prozesse auf und gibt die Ergebnisse als Liste zurück.

Beispiel 3: Verwendung einer Warteschlange für die prozessübergreifende Kommunikation

Wenn Prozesse miteinander kommunizieren oder Daten austauschen müssen, können Sie eine Warteschlange verwenden. Dies ist besonders nützlich, wenn Sie ein Producer-Consumer-Szenario haben.

from multiprocessing import Process, Queue

def producer(Warteschlange):
for i in range(5):
queue.put(i)
print(f "Produziert: {i}")

def consumer(warteschlange):
while not queue.empty():
item = queue.get()
print(f "Verbraucht: {item}")

if __name__ == "__main__":<
queue = Warteschlange()

# Erzeuger- und Verbraucherprozesse erstellen
producer_process = Process(target=producer, args=(queue,))
consumer_process = Process(target=consumer, args=(queue,))

# Beide Prozesse starten
producer_process.start()
consumer_process.start()

# Warten, bis beide Prozesse beendet sind
producer_process.join()
consumer_process.join()

print(“Alle Elemente wurden verarbeitet.”)

    • Warteschlange: Eine Warteschlange wird verwendet, um Daten zwischen Prozessen zu übertragen.
    • put(): Fügt ein Element in die Warteschlange ein.
    • get(): Holt ein Element aus der Warteschlange ab.

In diesem Beispiel fügt der Producer Elemente zur Warteschlange hinzu, während der Consumer diese Elemente abruft und verarbeitet.

Testen Sie Ihre Fähigkeiten mit unseren Hosting-Diensten und erhalten Sie 15% Rabatt!

Code an der Kasse verwenden:

Skills