Python: Pläne für effizienteres Multithreading ohne Global Interpreter Lock
Das Python Steering Council veröffentlicht die Planung für das langfristige Ende des Global Interpreter Lock, der als Hindernis für Multithreading gilt.
Das Python Steering Council hat die Pläne zum Abschied vom Global Interpreter Lock (GIL) veröffentlicht, der das Multithreading in Python ausbremst. Mittelfristig soll Python ohne GIL auskommen, aber der Umstieg erfolgt in drei Phasen, um die Rückwärtskompatibilität sicherzustellen.
Der GIL schränkt nebenläufige Programme ein, weil alle Python-Interpreter demselben globalen Lock unterworfen sind. Im Januar hatte Sam Gross von Metas Facebook AI Research, der unter anderem an der Entwicklung von PyTorch beteiligt ist, das Python Enhancement Proposal (PEP) 703 "Making the Global Interpreter Lock Optional in CPython" gestartet.
Das Steering Council hat im Juni eine Umfrage im Core-Developer-Team durchgeführt, ob die Mehrheit das erweiterte Multithreading allgemein wünscht und bereit ist, den mit der Umsetzung von PEP 703 verbundenen Aufwand auf sich zu nehmen. Die erste Frage erhielt eine deutliche Zustimmung, die zweite zumindest eine klare, wobei es dabei deutlich mehr Enthaltungen gab.
In einem Beitrag auf der Python-Diskussions-Site hat das Streering Council nun die Ergebnisse der Umfrage und die weiteren Pläne veröffentlicht. Das Gremium befürwortet demnach beide Umfragepunkte deutlich und hat vor, PEP 703 zu akzeptieren, müsse aber zunächst die Details dazu klären.
Langfristige Planung
Die Rückwärtskompatibilität hat für das Council eine hohe Priorität. Es will vermeiden, dass es wie beim Umstieg von Python 2 auf Python 3 zu Problemen mit vorhandenem Code komme. "Dies ist nicht Python 4" heißt es im Beitrag, und man überlege noch, welche Anforderungen man an die ABI-Kompatibilität (Application Binary Interface, Binärschnittstelle) stellen wolle.
Daher soll zunächst der No-GIL-Build neben dem bisherigen erscheinen. Langfristig soll er der einzige Build werden. Zuvor will das Steering Council aber sicherstellen, dass die Kompatibilität geklärt ist und die Community voll dahintersteht.
Sodann sollst du zählen bis drei
Das Council möchte die Umsetzung in drei Schritten vornehmen. Kurzfristig wird der No-GIL-Build neben dem regulären erscheinen. Vorgesehen ist der Einzug in das für 2024 geplante Python 3.13, es könnte aber auch Version 3.14 werden. Der No-GIL-Build gilt in der ersten Phase als experimentell, und Distributoren sollten ihn nicht als Standard-Interpreter integrieren.
Im zweiten Schritt gilt der No-GIL-Build als stabil, wird aber noch nicht zum Standard. Die Übergangsphase dient vor allem dazu, die Rückwärtskompatibilität sicherzustellen und die Akzeptanz in der Community zu stärken. Erste Distributoren können in der Phase bereits auf die Variante ohne GIL umschwenken.
Flexibler Fünfjahresplan
Langfristig wird der No-GIL-Build zum Standard und schließlich zur einzigen Variante. Überbleibsel des Global Interperter Lock sollen verschwinden, ohne unnötig die Abwärtskompatibilität zu beeinträchtigen. Das Council geht davon aus, dass es etwa fünf Jahre dauert, bis die letzte Phase erreicht ist.
Derzeit läuft die Betaphase für Python 3.12, das Sub-Intepreter einführt, die unabhängig vom globalen Lock arbeiten können (PEP 684).
Die Roadmap ist nicht in Stein gemeißelt, sondern sowohl das Core-Developer-Team als auch das Steering Council werden den Fortschritt und die zeitliche Planung immer wieder begutachten und prüfen, ob sich die weitere Arbeit lohnt. Das Gremium will laut dem Beitrag einen "weiteren zehnjährigen Kampf um die Abwärtskompatibilität" vermeiden und zur Not in der Lage sein, die Arbeit an PEP 703 abzubrechen und andere Wege zu finden.
(rme)