Programmierung: Erster Entwurf für Python ohne Global Interpreter Lock

Die Python-Community hat einen ersten offiziellen Entwurf für eine Erweiterung der Sprache vorgestellt ( PEP 703(öffnet im neuen Fenster) ), wie in der Standardimplementierung CPython künftig auf den sogenannten Global Interpreter Lock (GIL) verzichtet werden kann. Der GIL verhindert effektiv eine echte Nebenläufigkeit der Sprache. In der Vergangenheit gab es immer wieder Versuche, diese Technik in CPython abzuschaffen. Eine neue Idee zur Umsetzung dazu erhält seit vergangenem Jahr zahlreiche Unterstützung .
Die nun vorgestellte Erweiterung stammt von Entwickler Sam Gross, der zuvor schon das Nogil-Projekt begonnen hatte, das wiederum auf vorigen Arbeiten zu der Idee basiert, den GIL in Python abzuschaffen. Verfügbar ist der experimentelle Beispielcode seit Oktober 2021. Er hatte zunächst vor allem Probleme bei Python-Projekten, die Drittanbieter-Code nutzten.
Zur Notwendigkeit zum Verzicht auf den GIL in Python heißt es nun: "Der GIL ist ein Haupthindernis für Nebenläufigkeit. Für wissenschaftliche Rechenaufgaben ist dieser Mangel an Nebenläufigkeit oft ein größeres Problem als die Geschwindigkeit der Ausführung von Python-Code, da die meisten Prozessorzyklen in optimierten CPU- oder GPU-Kerneln verbracht werden. Der GIL führt einen globalen Flaschenhals ein, der andere Threads daran hindern kann, Fortschritte zu machen, wenn sie irgendeinen Python-Code aufrufen." Zwar gebe es dazu auch bisher schon einige Alternativen, diese hätten aber "erhebliche Begrenzungen" .
Python ohne GIL verändert API und ABI
Für die geplante Umsetzung weist der Entwurf darauf hin, dass die notwendigen Änderungen nur zur Kompilierzeit von CPython über eine entsprechende Option umgesetzt werden sollen. Standardmäßig wird Python also den GIL behalten. Darüber hinaus werden technische Details zur Implementierung genannt, die etwa die Referenzzählung, Speicherverwaltung, Thread-Sicherheit sowie auch Locking- und Atomic-APIs betrifft.
Darüber hinaus heißt es in dem Entwurf, dass die Neuerungen auch Änderungen mit sich bringen, die nicht abwärtskompatibel seien. Das umfasse vor allem die C-API. So müssten wegen der neuen ABI Erweiterungen neu gebaut werden, die die C-API verwenden. Darüber hinaus müsste das Verhalten möglicherweise angepasst werden mit Bezug auf die genannten internen Veränderungen. Ob und wie erfolgreich die Umsetzung von Python ohne GIL damit wird, hängt also maßgeblich davon ab, ob sich die Entwickler von Anwendungen und Erweiterungen, die davon profitieren könnten, für einen Support und Anpassungen entscheiden.



