
Python 3.14 est la derni�re version stable du langage de programmation et intervient exactement un an apr�s Python 3.13. Cette nouvelle version est livr�e avec un ensemble de modifications apport�es au langage, � l'impl�mentation et � la biblioth�que standard. Les changements les plus importants concernent les litt�raux de cha�ne de caract�res, l'�valuation diff�r�e des annotations et la prise en charge des sous-interpr�teurs dans la biblioth�que standard.
Les outils en ligne de commande de Python ont �galement �t� am�lior�s : la coloration syntaxique appara�t d�sormais dans unittest, argparse, json et d'autres modules, ce qui rend la sortie du terminal plus facile � lire pour les utilisateurs du langage.
Le mode Free-Threaded
Pendant des d�cennies, les d�veloppeurs Python ont travaill� avec une limitation puissante, mais parfois frustrante : le Global Interpreter Lock (GIL). Ce verrou garantissait qu'un seul thread pouvait ex�cuter le bytecode Python � la fois, simplifiant ainsi la gestion de la m�moire au d�triment du v�ritable parall�lisme multic�ur pour les t�ches li�es au CPU. Pour �voluer, les d�veloppeurs se sont tourn�s vers le multitraitement, qui, bien qu'efficace, comporte ses propres contraintes et d�fis en mati�re de partage des donn�es.
Avec la sortie de Python 3.14, le paysage de la concurrence dans Python a fondamentalement chang�. S'appuyant sur les travaux exp�rimentaux de la version 3.13, Python 3.14 prend officiellement en charge une version � free-threaded �, une version de l'interpr�teur CPython compil�e sans le GIL. Il s'agit d'un changement historique, qui permet � plusieurs threads d'ex�cuter du code Python sur plusieurs c�urs de processeur simultan�ment, le tout dans un seul processus.
Fonctionnement
Le free threading dans Python est d�sormais une impl�mentation compl�te de la PEP (Python Enhancement Proposal) 703, une fonctionnalit� tr�s attendue qui rend la programmation concurrente dans Python naturelle. Le mode free-threaded permet �galement d'utiliser un interpr�teur adaptatif sp�cialis�, qui faisait � l'origine partie du projet Faster CPython dirig� par Mark Shannon chez Microsoft (bien que la soci�t� ait cess� de le soutenir en mai 2025).
L'approche du Python � threads libres reste toutefois prudente. Le gros probl�me est que le code existant peut ne plus fonctionner (en particulier lors de l'utilisation de l'API C, car c'est l'interface binaire d'application, ou ABI, qui n'est pas compatible), et un deuxi�me probl�me est que le code � thread unique s'ex�cute entre 5 et 10 % plus lentement lorsqu'on utilise l'interpr�teur � threads libres.
En cons�quence, bien que le mode free-threaded soit d�sormais enti�rement pris en charge, l'interpr�teur � threads libres n'est pas install� par d�faut. Sur Mac, l'installateur exige qu'il soit s�lectionn� comme installation personnalis�e, et sur Windows, � l'aide d'un nouveau gestionnaire d'installation Python disponible en avant-premi�re sur Windows Store, l'utilisateur doit ajouter l'installation multithread � l'aide de la commande : py install 3.14t. Une fois install�e, la version multithread doit �tre sp�cifi�e � l'aide d'une commande telle que python3.14t, sinon la version monothread s'ex�cutera.
Un compilateur JIT exp�rimental
Une autre nouvelle fonctionnalit� visant � am�liorer les performances de Python est le compilateur juste-�-temps (Just-In-Time - JIT). Le compilateur JIT compl�te l'interpr�teur adaptatif sp�cialis�, qui acc�l�re Python en rempla�ant les bytecodes individuels par des versions sp�cialis�es par type. Optimisation plus ambitieuse que l'interpr�teur adaptatif sp�cialis�, le compilateur JIT prend des s�quences enti�res d'instructions bytecode et les remplace par des sections de code machine pr�g�n�r�es.
Avec Python 3.14, le compilateur JIT est disponible dans les versions binaires Microsoft Windows et macOS de CPython, mais il est d�sactiv� par d�faut, car il est encore consid�r� comme une fonctionnalit� exp�rimentale. Il peut �tre activ� � l'aide d'une variable d'environnement (PYTHON_JIT=1) ou de drapeaux de ligne de commande. Comme pour la version � threads libres, il est utile d'exp�rimenter le compilateur JIT sur vos charges de travail, mais ne vous attendez pas � des am�liorations de performances constantes.
En effet, � ce stade, vous risquez de constater un ralentissement plut�t qu'une acc�l�ration. Notez que le compilateur JIT de Python 3.14 n'est pas encore disponible dans une version � threads libres. Pour l'instant, vous pouvez activer l'un ou l'autre, mais pas les deux en m�me temps.
Un nouveau gestionnaire d'installation Python pour Microsoft Windows
L'installation de Python sur Microsoft Windows s'effectuait depuis longtemps � l'aide d'un outil de configuration qui ne g�rait pas toujours correctement les installations multiples de Python. Si vous aviez l'habitude d'ajouter et de supprimer diff�rentes versions de Python et de les ex�cuter en parall�le, le programme d'installation Python pour Windows pouvait parfois perturber le fonctionnement des versions plus anciennes.
Les responsables de Python ont cr�� un tout nouveau gestionnaire d'installation Python pour Windows. En apparence, il fonctionne de mani�re tr�s similaire � l'installateur Python d'origine : vous le lancez et il installe une �dition donn�e de Python. Mais il offre �galement des fonctionnalit�s �tendues pour supprimer ou mettre � jour toutes les versions pr�c�demment install�es, d�finir la version qui s'ex�cute par d�faut et invoquer une version donn�e pour une commande ou un programme Python sp�cifique.
Les litt�raux de cha�nes de mod�les t-string
Nous utilisons depuis longtemps les f-string dans Python pour formater facilement les variables dans une cha�ne. Python 3.14 introduit une fonctionnalit� encore plus avanc�e dans ce domaine, les litt�raux de cha�nes de mod�les telles que d�finies dans la PEP 750. Un litt�ral de cha�nes de mod�les, ou t-string, vous permet de combiner le mod�le avec une fonction qui op�re sur la structure du mod�le, et pas seulement sur sa sortie. Pour �crire un t-string, utilisez le pr�fixe � t � � la place du pr�fixe � f � :
Code Python : | S�lectionner tout |
1 2 3 | variety = 'Stilton' template = t'Try some {variety} cheese!' type(template) |
Vous pouvez �crire un gestionnaire de mod�les qui permet de manipuler au moment de la sortie toutes les variables plac�es dans le mod�le, ou seulement les variables d'un type sp�cifique, ou seulement les variables qui correspondent � une certaine sortie. Vous pouvez �galement traiter les variables et le texte d'interpolation comme des objets distincts, de types diff�rents. Les litt�raux de cha�nes de mod�les pourraient faciliter l'�criture de moteurs de mod�les, par exemple Jinja2, ou la duplication d'une grande partie des fonctionnalit�s de ces moteurs de mod�les directement en Python, sans avoir recours � des biblioth�ques tierces.
Interface de d�bogage externe s�curis�e
Python 3.14 introduit une interface de d�bogage sans surcharge qui permet aux d�bogueurs et aux profileurs de se connecter en toute s�curit� aux processus Python en cours d'ex�cution sans les arr�ter ni les red�marrer. Il s'agit d'une am�lioration significative des capacit�s de d�bogage de Python, qui rend d�sormais inutiles les alternatives non s�curis�es.
La nouvelle interface fournit des points d'ex�cution s�curis�s pour connecter le code du d�bogueur sans modifier le chemin d'ex�cution normal de l'interpr�teur ni ajouter de surcharge lors de l'ex�cution. Gr�ce � cela, les outils peuvent d�sormais inspecter et interagir avec les applications Python en temps r�el, ce qui est une fonctionnalit� cruciale pour les syst�mes � haute disponibilit� et les environnements de production.
Pour plus de commodit�, cette interface est impl�ment�e dans la fonction sys.remote_exec(). Par exemple :
Code Python : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 | import sys from tempfile import NamedTemporaryFile with NamedTemporaryFile(mode='w', suffix='.py', delete=False) as f: script_path = f.name f.write(f'import my_debugger; my_debugger.connect({os.getpid()})') # Execute in process with PID 1234 print('Behold! An offering:') sys.remote_exec(1234, script_path) |
Cette fonction permet d'envoyer du code Python � ex�cuter dans un processus cible au prochain point d'ex�cution s�curis�. Cependant, les auteurs d'outils peuvent �galement impl�menter le protocole directement comme d�crit dans la PEP 768, qui d�taille les m�canismes sous-jacents utilis�s pour se connecter en toute s�curit� aux processus en cours d'ex�cution. L'interface de d�bogage a �t� soigneusement con�ue dans un souci de s�curit� et comprend plusieurs m�canismes de contr�le d'acc�s :
- une variable d'environnement PYTHON_DISABLE_REMOTE_DEBUG ;
- une option de ligne de commande -X disable-remote-debug ;
- un indicateur de configuration --without-remote-debug pour d�sactiver compl�tement la fonctionnalit� au moment de la compilation.
Un nouveau type d'interpr�teur
Un nouveau type d'interpr�teur a �t� ajout� � CPython. Il utilise des appels de queue entre de petites fonctions C qui impl�mentent des opcodes Python individuels, plut�t qu'une seule grande instruction C. Pour certains compilateurs plus r�cents, cet interpr�teur offre des performances nettement sup�rieures. Les premiers benchmarks sugg�rent une moyenne g�om�trique de 3 � 5 % plus rapide sur la suite de benchmarks standard pyperformance, selon la plateforme et l'architecture. La base de r�f�rence est Python 3.14 compil� avec Clang 19, sans ce nouvel interpr�teur.
Cet interpr�teur ne fonctionne actuellement qu'avec Clang 19 et les versions plus r�centes sur les architectures x86-64 et AArch64. Cependant, une future version de GCC devrait �galement le prendre en charge. Cette fonctionnalit� est facultative pour l'instant. Il est fortement recommand� d'activer l'optimisation guid�e par profil lorsque vous utilisez le nouvel interpr�teur, car c'est la seule configuration qui a �t� test�e et valid�e pour am�liorer les performances. Pour plus d'informations, consultez --with-tail-call-interp.
Une API C pour la configuration du runtime Python
L'API C de configuration Python fournit une API C permettant aux utilisateurs de d�finir ou d'obtenir des informations sur la configuration actuelle de l'interpr�teur Python, en utilisant des objets Python plut�t que des structures C. De cette fa�on, l'interpr�teur peut �tre configur� directement � partir de Python lui-m�me, ce qui facilite l'�criture d'outils au niveau Python pour apporter des modifications au comportement de l'interpr�teur pendant l'ex�cution.
L'API C de configuration Python fait partie d'un nettoyage g�n�ral des composants internes et des API de CPython, y compris les API relatives � l'initialisation de CPython. Notez que les utilisateurs de C peuvent toujours revenir aux API de niveau inf�rieur s'ils en ont besoin.
Collecte incr�mentielle des d�chets
Le ramasse-miettes CPython a �t� remani� afin d'utiliser la collecte incr�mentielle pour de meilleures performances. Auparavant, les objets pouvaient �tre suivis dans jusqu'� trois g�n�rations diff�rentes pour la collecte des d�chets, en fonction de leur dur�e de vie. D�sormais, le ramasse-miettes n'utilise plus que deux g�n�rations, � jeune � et � ancienne �. Chaque balayage du ramasse-miettes traite l'ensemble de la g�n�ration jeune et une partie de la g�n�ration ancienne. Il en r�sulte des pauses de collecte des d�chets beaucoup plus courtes, parfois jusqu'� dix fois moins longues qu'auparavant.
Fonctionnalit�s d'introspection asyncio
Python dispose d�sormais d'une fonction en ligne de commande, python -m asyncio ps <process_id>, qui vous permet d'inspecter un programme Python en cours d'ex�cution � l'aide de l'ID de son processus d'interpr�teur et de r�v�ler des informations sur ses t�ches asyncio actuellement en cours d'ex�cution. L'un des principaux avantages de cette fonctionnalit� est qu'elle ne n�cessite pas d'ajouter d'instrumentation au programme inspect� ni d'arr�ter le programme en cours d'ex�cution pour ajouter du code d'inspection. Vous pouvez l'obtenir � partir de n'importe quel programme Python 3.14 en cours d'ex�cution.
Autres nouveaut�s dans Python 3.14
- Python 3.14 prend en charge l'�valuation diff�r�e des annotations ;
- Python 3.14 introduit de meilleurs messages d'erreur ;
- prise en charge de plusieurs interpr�teurs dans le m�me processus, avec des avantages en mati�re de performances et d'isolation pour certains types de programmation concurrente ;
- prise en charge de la compression Zstandard, un format rapide et efficace d�velopp� par Facebook, dans la biblioth�que standard Python ;
- Emscripten est d�sormais une plateforme officiellement prise en charge pour Python.
Comparaison des performances de Python 3.14 par rapport aux versions pr�c�dentes
Dans une analyse publi�e sur son blogue, l'ing�nieur logiciel Miguel Grinberg examine la vitesse de Python 3.14 par rapport aux versions pr�c�dentes. Elle fait suite � un article ant�rieur o� l�auteur s�interrogeait sur la lenteur suppos�e du langage et mesurait les progr�s des versions successives. Miguel Grinberg ex�cute une s�rie de benchmarks qu�il maintient depuis plusieurs ann�es, reposant sur des t�ches courantes �crites en Python pur, sans d�pendances externes. L�objectif est d��valuer l��volution du temps d�ex�cution dans des conditions identiques entre chaque version majeure du langage.
Voici la matrice de test sur laquelle Miguel Grinberg a travaill� :
- 6 versions de Python, plus les versions r�centes de Pypy, Node.js et Rust :
- CPython 3.9, 3.10, 3.11, 3.12, 3.13, 3.14 ;
- Pypy 3.11 ;
- Node 24 ;
- Rust 1.90.
- 3 interpr�teurs Python
- Standard ;
- Just-In-Time (JIT) : uniquement pour CPython 3.13+ ;
- Free-threading (FT) : uniquement pour CPython 3.13+.
- 2 scripts de test
- fibo.py : calcule les nombres de Fibonacci, en s'appuyant fortement sur la r�cursivit� ;
- bubble.py : trie une liste de nombres g�n�r�s al�atoirement � l'aide de l'algorithme de tri � bulles, avec beaucoup d'it�rations, mais sans r�cursivit�.
- 2 modes de threading
- single-threaded ;
- 4 threads ex�cutant des calculs ind�pendants.
- 2 ordinateurs
- un ordinateur portable Framework fonctionnant sous Ubuntu Linux 24.04 (processeur Intel Core i5) ;
- un ordinateur portable Mac fonctionnant sous macOS Sequoia (processeur M2).
� Vous pensez peut-�tre que l'inclusion de Node.js et Rust dans mon benchmark est un choix �trange. C'est peut-�tre le cas, mais j'ai tout de m�me port� les deux applications de test Python vers JavaScript et Rust, afin de disposer de chiffres de r�f�rence ext�rieurs � l'�cosyst�me Python, juste pour mettre les choses en perspective �, explique l'ing�nieur logiciel.
Benchmark n� 1 : Fibonacci � thread unique
Les tests montrent une am�lioration notable : Python 3.14 s�ex�cute environ 27 % plus vite que Python 3.13. Autrement dit, � charge de travail �quivalente, Python 3.13 atteint environ 79 % de la performance de Python 3.14. Selon Miguel Grinberg, ce gain repr�sente l�une des plus fortes progressions r�centes du langage. � Ces r�sultats montrent �galement que la version 3.11 est le point � partir duquel les versions de Python sont pass�es de "tr�s lentes" � "pas si lentes" �, a d�clar� Miguel Grinberg.
Les r�sultats des tests de Miguel Grinberg sugg�rent �galement que PyPy continue d'impressionner. L'ing�nieur logiciel a observ� que PyPy �tait l�g�rement plus rapide que Node.js et presque 5 fois plus rapide que Python 3.14. Il reste tout de m�me loin des performances de Rust, qui, comme pr�vu, surpasse tous les autres.
Variantes Just-In-Time et Free-Threading
� partir de Python 3.13, l'interpr�teur CPython se d�cline en trois versions : standard, free-threading (FT) et just-in-time (JIT). L'interpr�teur free-threading d�sactive le verrou global de l'interpr�teur (GIL), un changement qui promet d'importants gains de vitesse dans les applications multithread. L'interpr�teur JIT comprend un compilateur � la vol�e vers du code natif, ce qui devrait, en th�orie, aider les parties de code qui s'ex�cutent plusieurs fois � devenir plus rapides en les compilant vers du code natif une seule fois.
Selon Miguel Grinberg, les r�sultats �taient un peu d�cevants. � Au moins pour ce test, l'interpr�teur JIT n'a pas produit de gains de performances significatifs, � tel point que j'ai d� v�rifier deux ou trois fois que j'avais bien utilis� un interpr�teur correctement construit avec cette fonctionnalit� activ�e. Je ne sais pas grand-chose sur le fonctionnement interne du nouveau compilateur JIT, mais je me demande s'il ne peut pas g�rer cette fonction fortement r�cursive �, a d�clar� l'ing�nieur logiciel.
En ce qui...
La fin de cet article est r�serv�e aux abonn�s. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer � vous proposer des publications.