Ausgewählte Aspekte der Nebenläufigkeit in Python 3
Von Idego Group

Dieser Artikel untersucht Konzepte der parallelen und nebenläufigen Programmierung in Python 3.4+ und unterscheidet zwischen nebenläufigen Programmen mit mehreren logischen Threads und parallelen Programmen, die gleichzeitig auf mehreren Kernen ausgeführt werden.
Prozesse behalten separate Speicherbereiche und Interpreter bei, während Threads den Kontext innerhalb eines einzelnen Prozesses teilen. Threads eignen sich hervorragend für die Verarbeitung von I/O-Operationen, da sie andere Aufgaben während der Wartezeiten ausführen können, obwohl der Global Interpreter Lock (GIL) die gleichzeitige Ausführung von Python-Bytecode auf einen Thread beschränkt.
Es gibt mehrere Nebenläufigkeitsansätze: das Low-Level-_thread-Modul für direktes Thread-Management, das Threading-Modul mit Synchronisierungsmechanismen wie Locks und das Queue-Modul für sichere Inter-Thread-Kommunikation. Übergeordnete Lösungen umfassen concurrent.futures mit Thread- und Prozess-Pool-Executors.
Das Multiprocessing-Modul verarbeitet CPU-intensive Aufgaben mit separaten Prozessen, und externe Tools wie die OpenMP-Integration von Cython bieten zusätzliche Optionen. Für spezialisierte Anwendungsfälle ermöglicht Parallel Python verteiltes Computing über Netzwerkmaschinen.
Python-Threads eignen sich für I/O-gebundene Arbeit, sind jedoch bei CPU-intensiven Aufgaben aufgrund des GIL unterlegen. Prozessbasierte Lösungen umgehen diese Einschränkung, verursachen jedoch Serialisierungs-Overhead und erfordern ausreichend Rechenarbeit, um die Kommunikationskosten zu rechtfertigen.