IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Python 3.11 est en moyenne 25 % plus rapide que 3.10,
Compilé avec GCC sur Ubuntu Linux, l'accélération peut aller de 10 à 60 %

Le , par Bruno

43PARTAGES

7  0 
Python 3.11 est–il vraiment le Python le plus rapide ? Une chose est sûre, CPython 3.11 est en moyenne 25 % plus rapide que CPython 3.10 lorsqu'il est mesuré avec la suite de benchmark pyperformance, et compilé avec GCC sur Ubuntu Linux. En fonction de la charge de travail, l'accélération peut atteindre 10 à 60 %. L'équipe de développement de Python a annoncé le 4 octobre les améliorations et les nouvelles fonctionnalités de la version 3.11 de Python. Dans le but d’améliorer les performances du langage de programmation Python, Microsoft a lancé Faster CPython.

Il s’agit d’un projet financé par Microsoft, dont les membres comprennent l'inventeur de Python Guido van Rossum, l'ingénieur logiciel senior de Microsoft Eric Snow, et Mark Shannon qui est sous contrat avec Microsoft en tant que responsable technique du projet. « Python est largement reconnu comme étant lent. Alors que Python n'atteindra jamais les performances des langages de bas niveau comme C, Fortran, ou même Java, nous aimerions qu'il soit compétitif avec les implémentations rapides des langages de script, comme V8 pour Javascript », déclare Mark Shannon.


Python est un langage de programmation interprété, multi-paradigme et multi-plateformes. Il favorise la programmation impérative structurée, fonctionnelle et orientée objet. Il est doté d'un typage dynamique fort, d'une gestion automatique de la mémoire par ramasse-miettes et d'un système de gestion d'exceptions ; il est ainsi similaire à Perl, Ruby, Scheme, Smalltalk et Tcl.

Pour être performantes, les machines virtuelles pour les langages dynamiques doivent spécialiser le code qu'elles exécutent en fonction des types et des valeurs du programme en cours d'exécution. Cette spécialisation est souvent associée aux compilateurs Just-in-time (JIT), mais elle est bénéfique même sans génération de code machine. Le projet Faster CPython se concentre sur deux domaines majeurs de Python : un démarrage et une exécution plus rapides.

Notons que la spécialisation permet d'améliorer les performances, et l'adaptation permet à l'interprète de changer rapidement lorsque le modèle d'utilisation d'un programme change, limitant ainsi la quantité de travail supplémentaire causée par une mauvaise spécialisation.

Démarrage plus rapide

Python met en cache le bytecode dans le répertoire __pycache__ pour accélérer le chargement des modules. Dans la version 3.10, l'exécution des modules Python ressemblait à ceci :

Read __pycache__ -> Unmarshal -> Heap allocated code object -> Evaluate

Dans Python 3.11, les modules de base essentiels au démarrage de Python sont "bloqués". Cela signifie que leurs objets de code (et bytecode) sont alloués statiquement par l'interpréteur. Cela réduit les étapes du processus d'exécution des modules à ceci :

Statically allocated code object -> Evaluate

Le démarrage de l'interpréteur est désormais 10 à 15 % plus rapide dans Python 3.11. Cela a un impact important pour les programmes à courte durée d'exécution utilisant Python. Exécution plus rapide Les frames Python sont créés chaque fois que Python appelle une fonction Python. Cette trame contient des informations sur l'exécution. Les nouvelles optimisations des frames sont les suivantes :

  • Rationalisation du processus de création de trames ;
  • Éviter l'allocation de mémoire en réutilisant généreusement l'espace de trame sur la pile C ;
  • Rationalisation de la structure interne de la trame pour qu'elle ne contienne que les informations essentielles. Les frames contenaient auparavant des informations supplémentaires de débogage et de gestion de la mémoire.

Les objets frame de l'ancien style ne sont maintenant créés que sur demande des débogueurs ou des fonctions d'introspection Python telles que sys._getframe ou inspect.currentframe. Pour la plupart du code utilisateur, aucun objet frame n'est créé du tout. En conséquence, presque tous les appels de fonctions Python ont été accélérés de manière significative. Nous avons mesuré une accélération de 3 à 7 % dans pyperformance.

Lors d'un appel de fonction Python, Python appelle une fonction C évaluatrice pour interpréter le code de cette fonction. Cela limite efficacement la récursion Python pure à ce qui est fiable pour la pile C. Avec 3.11, lorsque CPython détecte un code Python appelant une autre fonction Python, il crée un nouveau frame et "saute" vers le nouveau code à l'intérieur du nouveau frame. Cela évite d'appeler la fonction d'interprétation C.

Faster CPython explore les optimisations pour CPython. Comme dit précédemment, l'équipe principale est financée par Microsoft pour travailler sur ce projet à temps plein. Pablo Galindo Salgado est également financé par Bloomberg LP pour travailler sur le projet à temps partiel. Enfin, de nombreux contributeurs sont des bénévoles de la communauté.

Le langage Python est placé sous une licence libre proche de la licence BSD et fonctionne sur la plupart des plateformes informatiques, des smartphones aux ordinateurs, de Windows à Unix avec notamment GNU/Linux en passant par macOS, ou encore Android, iOS, et peut aussi être traduit en Java ou .NET. Il est conçu pour optimiser la productivité des programmeurs en offrant des outils de haut niveau et une syntaxe simple à utiliser.

La plupart des appels de fonctions Python ne consomment plus d'espace dans la pile C. Cela accélère la plupart de ces appels. Cela accélère la plupart de ces appels. Dans les fonctions récursives simples comme fibonacci ou factorielle, une accélération de 1,7x a été observée. Cela signifie également que les fonctions récursives peuvent récurer beaucoup plus profondément (si l'utilisateur augmente la limite de récursion). Nous avons mesuré une amélioration de 1 à 3 % de la performance de py.

« L'ajout d'un interprète spécialisé et adaptatif à CPython apportera des améliorations significatives en termes de performances. Il est difficile d'avancer des chiffres significatifs, car cela dépend beaucoup des benchmarks et de travaux qui n'ont pas encore été réalisés. Des expérimentations approfondies suggèrent des accélérations allant jusqu'à 50 %. Même si le gain de vitesse n'était que de 25 %, cela resterait une amélioration intéressante », déclare Shannon.

« Plus précisément, nous voulons atteindre ces objectifs de performance avec CPython afin d'en faire bénéficier tous les utilisateurs de Python, y compris ceux qui ne peuvent pas utiliser PyPy ou d'autres machines virtuelles alternatives », ajoute-t-il. Lorsque Devclass s'est entretenu avec Pablo Galindo, membre du conseil de direction de Python et développeur principal, au sujet du nouveau profileur de mémoire Memray, il a décrit comment l'équipe Python utilise le travail de Microsoft dans la version 3.11.

« L'une des choses que nous faisons est que nous rendons l'interpréteur plus rapide, déclare Pablo Galindo, membre du conseil de direction de Python et développeur principal. Mais il va également utiliser un peu plus de mémoire, juste un peu, parce que la plupart de ces optimisations ont une sorte de coût en mémoire, étant donné que nous devons stocker des choses pour les utiliser plus tard, ou parce que nous avons une version optimisée mais parfois, quelqu'un a besoin de demander une version non optimisée pour le débogage, donc nous devons stocker les deux. »

PEP 659 : spécialisation de l'interpréteur adaptatif

Le PEP 659 est l'un des éléments clés du projet Faster CPython. L'idée générale est que, bien que Python soit un langage dynamique, la plupart du code comporte des régions où les objets et les types changent rarement. Ce concept est connu sous le nom de stabilité des types. Au moment de l'exécution, Python essaie de rechercher des modèles communs et la stabilité des types dans le code en cours d'exécution. Python remplace alors l'opération en cours par une opération plus spécialisée.

Cette opération spécialisée utilise des chemins rapides disponibles uniquement pour ces cas d'utilisation/types, qui sont généralement plus performants que leurs équivalents génériques. Cela fait également appel à un autre concept appelé "inline caching", dans lequel Python met en cache les résultats des opérations coûteuses directement dans le bytecode. Le spécialisateur combinera également certaines paires d'instructions communes en une super-instruction. Cela réduit l'overhead pendant l'exécution.

Python ne se spécialise que lorsqu'il voit du code "hot" (exécuté plusieurs fois). Cela évite à Python de perdre du temps pour du code "run-once". Python peut également se déspécialiser lorsque le code est trop dynamique ou lorsque l'utilisation change. La spécialisation est tentée périodiquement, et les tentatives de spécialisation ne sont pas trop coûteuses. Cela permet à la spécialisation de s'adapter aux nouvelles circonstances.

Le projet pyperformance a pour but d'être une source faisant autorité en matière de benchmarks pour toutes les implémentations de Python. L'accent est mis sur les benchmarks du monde réel, plutôt que sur les benchmarks synthétiques, en utilisant des applications complètes lorsque cela est possible.

Source : Python

Et vous ?

« Python 3.11 est en moyenne 25 % plus rapide que 3.10 », êtes-vous d'avis ?

Que pensez-vous de Python 11 ?

Avez-vous une expérience avec Python ?

Êtes-vous pour ou contre la suppression du Global Interpreter Lock ?

Voir aussi :

Python 3.11 améliorera l'emplacement des erreurs dans les tracebacks et apporte de nouvelles fonctionnalités

La version 3.2 du framework Django est disponible, avec la découverte automatique d'AppConfig, elle apporte de nouveaux décorateurs pour le module d'administration

Django 2.0 est disponible en version stable, quelles sont les nouveautés dans cette version du framework Web écrit en Python ?

JetBrains soutient Django : bénéficiez d'une remise de 30 % pour l'achat d'une licence individuelle PyCharm Professional et l'intégralité des sommes perçues seront reversées à la Fondation Django

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de archqt
Membre émérite https://www.developpez.com
Le 29/10/2022 à 15:01
Le C++ a une syntaxe moche ? autant les templates à la création cela peut être effectivement compliqué, mais cela est réservé pour les cas complexes aux experts, autant pour le reste je ne trouve pas cela moche
4  0 
Avatar de HaryRoseAndMac
Membre extrêmement actif https://www.developpez.com
Le 31/10/2022 à 0:15
Citation Envoyé par archqt Voir le message
Le C++ a une syntaxe moche ? autant les templates à la création cela peut être effectivement compliqué, mais cela est réservé pour les cas complexes aux experts, autant pour le reste je ne trouve pas cela moche
De toute façon, dire qu'un langage est moche, quel qu'il soit c'est un peu débile ...
Le langage est secondaire dans tout les cas.

Il n'est là que pour permettre d'atteindre un but précis : donner vie à une idée.
Celui qui se masturbe sur le langage est clairement à des années lumières d'avoir compris le boulot de développeur.

Même si il est évident que certains sont plus adapté à des contextes et que donc, la règle numéro une dans ce métier c'est "ça dépend", même là, s'attacher à ça n'est pas se concentrer sur les bonnes choses.

Les seuls à être convaincu de l'inverse de ce que je viens d'écrire, ce sont les mecs formés à l'arrache en six mois, ultra spécialisé qui ne connaissent rien au code et qui se rendrons compte dans 5 ans qu'ils étaient sur la mauvaise route depuis le départ.
4  1 
Avatar de electroremy
Membre expérimenté https://www.developpez.com
Le 21/11/2022 à 14:38
La performance des langages n'est pas seulement accessoire

Un bon langage qui permet de faire plus facilement du code compact et rapide permet :
- d'économiser de l'énergie
- d'utiliser un système avec moins de RAM, moins de ROM et un CPU plus lent ce qui éviter de remplacer son matériel

Un langage à la fois lent et populaire est une catastrophe pour la planète et nos portemonnaies.

Bien sûr, il y a le rôle du programmeur qui doit optimiser son code.

Exemple : sur Arduino, j'ai optimisé deux bibliothèques pour faire "rentrer" le code de mon projet dans les 32ko de rom (client TCP IP + écran LCD graphique + dalle tactile + capteurs). Non seulement ça marche mais en plus mes fonctions sont à la fois plus complète et sont 8 à 13 fois plus rapide que le code d'origine.
Mais ça demandé pas mal de travail...
...et surtout mon code n'est plus "portables" sur les autres cartes à microcontrôleur
...normal, on ne peut pas tout avoir

Quand on voit ce que demande en RAM et en CPU les versions actuelles de Word et Excel, alors qu'on ne fait pas grand chose de plus avec que les versions de 1997...

Mon premier ordinateur était un Amiga 1200, CPU 68020 à 14Mhz, 2Mo de RAM, j'étais impressionné par ce qu'arrivait à en tirer les programmeurs de l'époque, notamment sur des jeux dignes de bornes d'arcade, des applications graphiques et musicales.

S'agissant de la syntaxe et du confort, ça ne dépend pas que du langage mais aussi de l'IDE.
Un langage "facile" peut être performant : si par exemple les premières versions de Visual Basic étaient lentes, la version VB.NET permet de faire du code aussi rapide qu'en C#
2  0 
Avatar de leopard78
Candidat au Club https://www.developpez.com
Le 07/11/2022 à 14:15
Si tu code moche en C++ c’est ton problème 😬 pas les autres !
1  0 
Avatar de fred1599
Expert éminent https://www.developpez.com
Le 16/11/2022 à 8:04
Bonjour,

Dire qu'un langage est moche est très souvent subjectif et un avis de ce type ne concerne que soit. On lui demande le sien, il le donne... ce n'est pas pour ça que le contredire lui fera changer d'avis sur le C++ ou tout ceux qui sont d'accord avec lui.

La version 3.11 est sans doute améliorée, ce n'est pas pour autant que j'ai choisi ce langage, et ce n'est pas non plus pour cela que des développeurs se mettront à apprendre ce langage.

Même si c'est plus rapide, ça ne le sera pas suffisamment face à des langages compilés et autant dire que c'est souvent à cette comparaison (langages interprétés - compilés) que l'on fait référence.

Par contre cette amélioration peut être intéressante et faire la différence sur des langages comme ruby, R et surtout celui qui commence à faire de l'ombre... julia.

julia étant connu pour être bien plus performant et spécialisé pour des travaux scientifiques, on peut être amené à choisir l'un ou l'autre, et cette version 3.11 équilibre les forces côté performances.
1  0 
Avatar de shenron666
Expert confirmé https://www.developpez.com
Le 07/11/2022 à 20:51
Le binaire compilé en C++ s'exécute en seulement 1,8 fois moins de temps que le code javascript.
Mon premier avis est que je doute que le code C++ soit correctement écrit.
En plus, comparer des temps d'exécution de cet ordre (moins d'une seconde) manque de précision.

Dire que C++ a une syntaxe moche est plus que ridicule vu que la beauté c'est subjectif, et la beauté d'un code c'est... encore plus subjectif.
Perso je préfère le C# mais jamais je n'irai dire que c'est plus beau ou moins moche qu'un autre langage.
0  0 
Avatar de byrautor
Membre éclairé https://www.developpez.com
Le 08/11/2022 à 13:36
3 fois plus rapide !
Mazette, il faut y croire, ma conviction est que ...
0  0 
Avatar de vivid
Membre habitué https://www.developpez.com
Le 16/11/2022 à 7:35
X3 fois plus rapide, c'est reconnaitre que la version précédente a été conçue avec les pieds ! ils font la promotion de leur incompétence ?!!
0  0