32.2 Pythons Schnittstellen zur Parallelisierung 

Python stellt verschiedene Schnittstellen bereit, um Teile eines Programms in verschiedenen Threads oder Prozessen auszuführen. Dabei hängt es von dem konkreten Einsatzzweck ab, welche der Schnittstellen verwendet werden sollte.
Schnittstelle | Eigenschaften |
---|---|
concurrent.futures | hoher Abstraktionsgrad, geringe Flexibilität, keine Möglichkeiten zur Synchronisierung |
threading, multiprocessing | geringerer Abstraktionsgrad, hohe Flexibilität, Synchronisierungsmöglichkeiten |
Tabelle 32.1 Pythons Schnittstellen zur Parallelisierung
Für einfache Aufgaben, die unabhängig voneinander und ohne Datenaustausch durchgeführt werden können, gibt es das Modul concurrent.futures[ 129 ](Das Modul concurrent.futures wurde in Python 3.2 eingeführt. Mit dem Modul futures im Python Package Index kann diese Funktion aber auch in älteren Versionen von Python genutzt werden. ). Es stellt eine komfortable Schnittstelle zur Verfügung, die es ermöglicht, Funktionsaufrufe in verschiedenen Threads oder Prozessen auszuführen. Dabei wird davon ausgegangen, dass jeder Funktionsaufruf unabhängig von den anderen durchlaufen werden kann, wobei die Reihenfolge der Aufrufe keine Rolle spielen darf und auch keine Daten zwischen den verschiedenen Funktionsaufrufen ausgetauscht werden dürfen.
Die Module threading und multiprocessing hingegen stellen mächtige Werkzeuge bereit, um bei parallelen Programmen auch Daten zwischen Prozessen beziehungsweise Threads in sicherer Weise auszutauschen. Intern verwendet concurrent.futures die Fähigkeiten der Module threading beziehungsweise multiprocessing, sodass es sich dabei nicht um eine gesonderte Implementierung, sondern eine zusätzliche Abstraktionsschicht handelt.
Wir werden in diesem Kapitel zunächst die abstraktere Schnittstelle concurrent.futures betrachten und später auf ausgewählte Probleme der Synchronisierung mehrerer Threads oder Prozesse in threading und multiprocessing eingehen.