GIL steht für "global interpreter lock" (auf deutsch: globale Interpretersperre). Der GIL im CPython-Interpreter, also der am häufigsten genutzten Python-Implementierung, sorgt dafür, dass innerhalb eines Interpreterprozesse mehrere Threads nicht gleichzeitig ausgeführt werden können und es so nicht zu konkurrierenden Speicherzugriffen und Race Conditions kommt.
Beim Programmieren mit Python kommt man mit dem GIL normalerweise nicht direkt in Kontakt. Wenn man aber ein Programm schreibt, welches Multithreading einsetzt, kann der GIL relevant werden. Startet man mittels des threading oder concurrent.futures Modul mehrere Threads, werden diese in CPython aufgrund des GIL nicht parallel ausgeführt.
Seit Anfang 2023 gibt es seitens der Python-Entwickler Arbeiten, um den GIL aus Python zu entfernen. Python 3.13 ist die erste Python-Version, bei der man beim selber kompilieren ein GIL-freies Python bauen kann. Standardmäßig ist der GIL aber nach wie vor aktiv.
Um zu sehen, ob das verwendete CPython mit oder ohne GIL kompiliert wurde, kann man im interaktiven Python-Interpreter die folgenden Befehle nutzen:
>>> import sys
>>> sys._is_gil_enabled()
True
#bedeutet: mit GIL bebaut; ohne GIL würde man `False` zurück erhalten
weiterführend Links:
- Erklärung zum GIL im Python-Wiki
- ausführlicher Artikel zum GIL bei RealPython
- PEP 703: "Making the Global Interpreter Lock Optional in CPython" - Beschreibung, wie der GIL aus Python entfernt werden kann
Comments 3