
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...
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.