Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Herausforderung: Der Parallele Quadratsammler | Multithreading vs. Multiprocessing
Python Fortgeschrittene Konzepte
Abschnitt 3. Kapitel 5
single

single

Herausforderung: Der Parallele Quadratsammler

Swipe um das Menü anzuzeigen

Multiprocessing in Python ermöglicht das gleichzeitige Ausführen mehrerer Prozesse, wobei jeder Prozess über einen eigenen Python-Interpreter und eigenen Speicherbereich verfügt. Dieser Ansatz ist besonders nützlich für CPU-intensive Aufgaben, bei denen mehrere CPU-Kerne genutzt werden sollen, um Berechnungen schneller durchzuführen. Durch den Einsatz von Multiprocessing kann die Leistung bei rechenintensiven Operationen wie Datenverarbeitung, wissenschaftlichen Berechnungen oder Simulationen erheblich gesteigert werden.

Note
Hinweis

Die Klasse multiprocessing.Manager bietet eine Möglichkeit, gemeinsam genutzte Objekte – wie Listen und Dictionaries – zu erstellen, auf die mehrere Prozesse sicher zugreifen und die sie verändern können. Wenn Ergebnisse gesammelt oder Daten zwischen verschiedenen Process-Instanzen koordiniert werden müssen, sollte immer ein Manager zur Erstellung dieser gemeinsamen Objekte verwendet werden. Normale Python-Listen und -Dictionaries werden nicht zwischen Prozessen geteilt, sodass Änderungen in einem Prozess für andere nicht sichtbar sind. Mit einer Manager-Liste kann jeder Prozess Daten anhängen oder ändern, und alle Änderungen sind für jeden Prozess sichtbar, der dieses gemeinsame Objekt verwendet.

1234567891011121314151617181920
from multiprocessing import Process, Manager def add_value(value, shared_list): shared_list.append(value) if __name__ == "__main__": manager = Manager() shared_list = manager.list() processes = [] values = [10, 20, 30, 40, 50] for v in values: p = Process(target=add_value, args=(v, shared_list)) processes.append(p) p.start() for p in processes: p.join() print("Collected results:", list(shared_list))

Dieser Code zeigt, wie multiprocessing.Manager verwendet wird, um eine gemeinsam genutzte Liste zu erstellen, auf die mehrere Prozesse zugreifen und die sie verändern können. Jeder Prozess berechnet das Quadrat einer Zahl und fügt das Ergebnis der gemeinsamen Liste hinzu. Durch die Verwendung einer Manager-Liste wird sichergestellt, dass alle Prozesse Daten sicher gemeinsam nutzen und sammeln können, sodass Ergebnisse von parallel laufenden Prozessen zusammengeführt werden können.

Aufgabe

Wischen, um mit dem Codieren zu beginnen

Schreiben Sie eine Funktion namens compute_square, die eine einzelne Ganzzahl und eine results-Liste als Argumente erhält, das Quadrat der Ganzzahl berechnet und das Ergebnis an die Liste results anhängt.

Verwenden Sie anschließend die Klasse multiprocessing.Process, um für jede Zahl in der Liste numbers einen separaten Prozess zu erstellen, der ihr Quadrat parallel berechnet. Sammeln Sie die Ergebnisse aller Prozesse und speichern Sie sie in der Variablen results.

  • Implementieren Sie die Funktion compute_square mit zwei Argumenten: der zu quadrierenden Ganzzahl und der Liste results.
  • Berechnen Sie in compute_square das Quadrat der Ganzzahl und hängen Sie es an die Liste results an.
  • Erstellen Sie für jede Zahl in numbers einen Process, der auf compute_square mit der Zahl und results als Argumente abzielt.
  • Starten Sie alle Prozesse und führen Sie anschließend ein Join durch, um sicherzustellen, dass alle Berechnungen abgeschlossen sind, bevor Sie die Ergebnisse überprüfen.
  • Speichern Sie alle berechneten Quadrate in der Liste results.

Lösung

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 5
single

single

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

some-alt