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 !

Les créateurs de Python dévoilent leurs plans d'accélération pour Python,
Qui promettent de le rendre 2 à 5 fois plus rapide sans casser aucun code existant

Le , par Stan Adkens

327PARTAGES

19  0 
Le langage de programmation Python dispose déjà de nombreux moyens de s'exécuter plus rapidement, qu'il s'agisse des runtimes d'exécution alternatifs comme PyPy ou de modules écrits en C/C++. Mais presque aucune de ces méthodes n'implique l'accélération de CPython lui-même – l'implémentation de référence de Python, écrite en C, qui est la version la plus largement utilisée du langage. Lors du Python Language Summit qui s'est tenu au PyCon 2021 la semaine dernière, le créateur du langage Python, Guido van Rossum, a dévoilé des plans à court et à long terme pour rendre Python plus rapide – d’un facteur de deux à cinq fois plus rapide, voire plus, tout en restant compatibles avec le code existant.

Le langage de programmation est relativement lent dans son implémentation CPython par défaut, bien qu'il existe de nombreux moyens de le rendre plus rapide, notamment des alternatives axées sur les performances comme PyPy. Historiquement, van Rossum ne semblait pas se soucier des performances de Python, privilégiant la simplicité d'un compilateur moins bien optimisé. Mais le créateur du populaire langage de programmation Python a fait part de ses ambitions de le rendre 2 à 5 fois plus rapide, en remédiant à l'une des principales faiblesses de Python par rapport à des langages plus rapides comme le C++.


Son manque de performance explique en partie pourquoi Python a gravité vers la science des données et l'apprentissage automatique, où de nombreuses charges de travail sont confiées aux GPU. L'autre raison de son essor dans ces domaines est la richesse des bibliothèques spécifiques, de NumPy au framework d'apprentissage automatique TensorFlow, soutenu par Google.

Dans le cadre d'une contribution au US PyCon Language Summit 2021, van Rossum a publié un document sur GitHub, propriété de Microsoft, dans lequel il détaille certaines de ses ambitions pour faire de Python un langage plus rapide, promettant de doubler sa vitesse à partir de Python 3.11 – l'une des trois branches de Python qui sortiront l'année prochaine, et actuellement en cours de développement officiel en tant que projet de niveau préalpha.

Le créateur de Python a été embauché en novembre dernier par Microsoft, une entreprise favorable aux logiciels libres, qui l'a fait sortir de sa retraite après un passage chez Dropbox. « Je m'ennuyais à rester assis à la maison pendant ma retraite », a fait savoir van Rossum dans sa présentation, un document PDF. « J'ai postulé chez Microsoft et j'ai été embauché. On m'a donné la liberté de choisir un projet. J'ai choisi de revenir à mes racines. C'est la façon dont Microsoft rend la pareille à Python ».

Microsoft a soutenu Python de diverses manières, notamment par des cours gratuits de Python qui servent de rampe d'accès à ses services d'intelligence artificielle dans Azure Cloud, par le soutien de son extension VS Code Python et par la présence de Python dans Windows 10. Microsoft est également sponsor de la Python Software Foundation (PSF) depuis 2006 et lui a versé 150 000 dollars cette année.

Le projet est une « petite équipe financée par Microsoft », selon van Rossum, afin de « prendre en charge l'amélioration des performances » du langage interprété. Microsoft compte actuellement cinq développeurs principaux qui contribuent au développement de CPython, dont Brett Cannon, Steve Dower, Guido van Rossum, Eric Snow et Barry Warsaw – tous des vétérans de la communauté des développeurs principaux de Python.

Comme Microsoft l'a indiqué dans une note en avril, Snow a travaillé sur les performances multithread en Python via des sous-interpréteurs. Dower sert en tant que build manager et est un expert de CPython pour Windows depuis la version 3.5 de Python. Warsaw contribue au conseil de direction de Python, à l'équipe de réponse à la sécurité de Python et à la liste des gestionnaires de versions de Python. Le projet dispose d'un dépôt GitHub qui comprend un fork de CPython ainsi qu'un "issue tracker" pour les idées et les outils d'analyse des performances.

Les moyens de rendre Python plus rapide et les contraintes pour rester compatibles avec le code existant

Dans la présentation faite lors du Language Summit, van Rossum a décrit comment le plan actuel visant à accélérer Python doit être soumis à de sévères contraintes. Les modifications apportées à CPython ne doivent pas casser l'ABI (application binary interface) du runtime, de sorte que les extensions Python écrites en C continuent de fonctionner telles quelles. Les modifications doivent être incrémentielles et gérables, conformément aux objectifs généraux de CPython, à savoir préserver la maintenabilité et une base de code simple et compréhensible. Et toutes les modifications doivent être open source ; il ne peut y avoir d'extensions propriétaires, de "boîtes noires" à Cpython.

« Ne pas casser la compatibilité stable de l'ABI ; ne pas casser la compatibilité limitée de l'API ; ne pas casser ou ne pas ralentir les cas extrêmes », a promis van Rossum. « Garder un code maintenable », a-t-il ajouté.

Les changements incrémentiels sont une question sensible pour les développeurs Python, qui ont été confrontés à une tâche gigantesque lors du passage du code de Python 2.x à Python 3, qui a pris plus de dix ans. « Pas de forks/branches à longue durée de vie, pas de surprise de 6 000 lignes [pull requests] », a écrit van Rossum. « Nous nous occuperons également de la maintenance et du support... Toutes les discussions dans les trackers sur les dépôts GitHub ouverts », ajoute-t-il.


Dans le cadre de ces contraintes, van Rossum et ses collègues ont identifié quelques parties de Python qui pouvaient être modifiées librement. Le système de bytecode, le compilateur et l'interpréteur de Python ont tous été désignés comme cibles, car ils ont tendance à changer entre les versions. Le bytecode en particulier n'offre aucune garantie de compatibilité entre les versions majeures, il pourrait donc être modifié de façon radicale si nécessaire.

Le plan à court terme consiste à ajouter au moins un ensemble important d'améliorations des performances à Python 3.11. Les premières propositions visant Python 3.11 comprennent un « interpréteur de bytecode adaptatif et spécialisé », comme indiqué dans PEP 659. Les instructions de bytecode qui font référence à un type de données spécifique dans une section particulière du code pourraient être remplacées en ligne par une version "spécialisée" de ce bytecode pour ce type particulier de données, ce qui engendrerait un gain de vitesse, d’après l’équipe. Les développeurs estiment une amélioration potentielle des performances d'environ 50 % dans les meilleurs cas.

D'autres suggestions d'amélioration de la vitesse comprennent l'optimisation de la pile de trames, la modification de la façon dont les appels de fonction sont effectués, la mise en œuvre d'un traitement plus efficace des exceptions, l'ajout d'optimisations qui accélèrent le temps de démarrage et la modification du format de fichier cache du bytecode .pyc.

Tous ces changements ne sont pas à la hauteur de l'une des améliorations les plus couramment suggérées pour Python : la génération de code machine au moment de l'exécution, ou compilation juste à temps ("JIT". Dans son exposé, van Rossum a suggéré que de tels plans seraient envisagés après Python 3.11, parce qu'il était logique d'obtenir d'abord les améliorations de performance possibles avec des changements plus ciblés.

Mais le projet Python de base sera-t-il réellement capable de doubler la vitesse des versions actuelles de Python ? Le discours de van Rossum suggère qu'il ne veut pas être tenu responsable d'un projet aussi ambitieux. « Nous sommes loin d'être certains d'atteindre 2x ! », a-t-il écrit. « Mais nous sommes optimistes et curieux ».

Néanmoins, il a évoqué l'idée d'une vitesse multipliée par cinq après Python 3.11, notant que « nous devrons être créatifs ». Selon lui, les principaux bénéficiaires des changements à venir dans Python seront ceux qui exécutent du « code Python pur à forte intensité de CPU » et les utilisateurs de sites Web avec Python intégré. Il n'y aura cependant pas beaucoup d'avantages pour le code déjà écrit en C, comme NumPy et TensorFlow, le code lié aux E/S, le code multithreading et le code algorithmiquement inefficace.

La sortie de Python 3.10, actuellement en version bêta, est prévue pour octobre de cette année. Le calendrier de publication étant à peu près annuel, on peut s'attendre à une version 3.11 en octobre 2022.

Sources : Présentation Python Language Summit, Dépôt faster-cypthon

Et vous ?

Que pensez-vous des ambitions d’accélération de Python par un facteur de 2 à 5 fois plus rapide, voire plus ?
Le projet promet d'accélérer Python tout en restant compatible avec le code existant. Quel est votre avis à ce sujet ?
Que pensez-vous des parties de Python que van Rossum et son équipe ont choisies pour être modifiées librement ?

Voir aussi :

Guido van Rossum, le créateur du langage de programmation Python, rejoint Microsoft, déclarant que la retraite est "ennuyeuse"
Python 3.9 est disponible et s'accompagne de l'ajout des opérateurs "|" et "| =" aux dictionnaires, ainsi que de la possibilité de construire des types génériques dans les collections standard
https://python.developpez.com/actu/309353/Microsoft-annonce-Playwright-pour-le-langage-Python-permettant-de-tester-les-applications-Web-et-qui-fonctionne-dans-tous-les-principaux-navigateurs/
Microsoft a intégré Python 3.7 par défaut dans la MàJ Windows 10 mai 2019, de son système d'exploitation

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

Avatar de
https://www.developpez.com
Le 17/05/2021 à 12:08
Personnellement, j'attends je jour où on pourra faire de la compilation statique avec CPython, et créer des exécutables légers qui n'embarquent pas des centaines de Mo de dépendances inutiles, le tout de manière simple et efficace.
10  0 
Avatar de stef-13013
Membre actif https://www.developpez.com
Le 17/05/2021 à 11:22
Très intéressant,

Juste deux points :

"Le créateur de Python a été embauché en novembre dernier par Microsoft, une entreprise favorable aux logiciels libres"

hahahahaha, très bon...

Et s'il faut comparer la vitesse de Python, ce n'est pas par rapport à du compilé mais plutôt à des langages style PHP (et dans une moindre mesure Java, etc.)
11  2 
Avatar de CaptainDangeax
Membre expérimenté https://www.developpez.com
Le 17/05/2021 à 12:15
Je suis passé de Perl sur mon projet précédent à Python sur mon projet actuell. ràf du ratio 1:2 en faveur du Perl sur la vitesse, C/C++ fait 100x mieux. Par contre quelle libération de passer du Perl illisible même avec un code propre et Python avec un code clair comme de l'anglais.
Donc très bien pour la performance en espérant que MS ne nous refasse pas le coup du 3E : Embrace, Extend, Extinguish comme ils ont si souvent pratiqué
4  0 
Avatar de CaptainDangeax
Membre expérimenté https://www.developpez.com
Le 17/05/2021 à 12:17
Citation Envoyé par stef-13013 Voir le message
Très intéressant,

Juste deux points :

"Le créateur de Python a été embauché en novembre dernier par Microsoft, une entreprise favorable aux logiciels libres"

hahahahaha, très bon...

Et s'il faut comparer la vitesse de Python, ce n'est pas par rapport à du compilé mais plutôt à des langages style PHP (et dans une moindre mesure Java, etc.)
J'avais fait des tests sur un tri à bulle. En Perl, 16 secondes, en Python 25 secondes. En C, une fraction de seconde sur un tableau 10 fois plus grand. Et en bash, 100 fois plus lent que Perl ou Python, mais ce n'est pas ce qu'on demande, n'est-ce pas ?
4  1 
Avatar de stef-13013
Membre actif https://www.developpez.com
Le 17/05/2021 à 14:43
Citation Envoyé par Jeff_67 Voir le message
Personnellement, j'attends je jour où on pourra faire de la compilation statique avec CPython, et créer des exécutables légers qui n'embarquent pas des centaines de Mo de dépendances inutiles, le tout de manière simple et efficace.
Vous risquez d'attendre un moment pour une seule et bonne raison : Le langage n'est pas prévu pour ça à la base.

Vu son aspect ultra-dynamique, il est presque impossible de faire de l'AOT...
Et même si dans certains cas, on peut y arriver (pas simple !), vous allez vous retrouver avec des exe. d'une taille monstrueuse.
(Il existe tout de même de très beaux projets comme Cython ou Nuitka qui tentent le coup, avec plus ou moins de réussite)

La seule approche logique (mais c'est un avis perso) est le JIT.

Donc en résumé :
Python n'est tout simplement pas le bon langage pour obtenir un exe (et de qui plus est "light"
Il vaut mieux se pencher sur des langages dont le design est prévu pour ça (qui a dit Go ?)

Débat passionnant…
1  0 
Avatar de
https://www.developpez.com
Le 17/05/2021 à 14:57
Citation Envoyé par stef-13013 Voir le message
Vous risquez d'attendre un moment pour une seule et bonne raison : Le langage n'est pas prévu pour ça à la base.

Vu son aspect ultra-dynamique, il est presque impossible de faire de l'AOT...
Et même si dans certains cas, on peut y arriver (pas simple !), vous allez vous retrouver avec des exe. d'une taille monstrueuse.
(Il existe tout de même de très beaux projets comme Cython ou Nuitka qui tentent le coup, avec plus ou moins de réussite)

La seule approche logique (mais c'est un avis perso) est le JIT.

Donc en résumé :
Python n'est tout simplement pas le bon langage pour obtenir un exe (et de qui plus est "light"
Il vaut mieux se pencher sur des langages dont le design est prévu pour ça (qui a dit Go ?)

Débat passionnant…
Il ne faut pas confondre le langage et l'implémentation. Jython et Ironpython arrivent à produire des exécutables d'une taille tout à fait acceptable, même si ce ne sont pas de bons choix techniques pour plein d'autres raisons.
0  0 
Avatar de stef-13013
Membre actif https://www.developpez.com
Le 17/05/2021 à 15:27
Citation Envoyé par Jeff_67 Voir le message
Il ne faut pas confondre le langage et l'implémentation. Jython et Ironpython arrivent à produire des exécutables d'une taille tout à fait acceptable, même si ce ne sont pas de bons choix techniques pour plein d'autres raisons.
Oui mais ce sont avant tout des JIT, donc pas d'AOT

De plus, le design du langage force souvent son implémentation (ex: Java, C#, Go)

Après comme je le disais dans le post précédent, le JIT me semble une option plus que crédible pour "accélérer"

(A noter que même avec une VM, on est loin de ce que j'appelle un "executable léger"
0  0 
Avatar de calvaire
Expert confirmé https://www.developpez.com
Le 17/05/2021 à 21:15
Moi j'aimerais bien un vrai support des threads comme en java (non le multiprocessing n'est pas une solution).
Du coup si il refaisait le GIL, ce serait un vrai bonheur.

Bon en vrai les perfs en python "on s'en fou", quand on veut du code performant on code plus en python pur mais on utilise des libs optimisé (pyopencl, numpy, pandas...)
avec numpy on a des perf quasi similaire à du code c/c++ quand même (normal c'est du c qui tourne derrière...)
0  0 
Avatar de Pogzy
Membre à l'essai https://www.developpez.com
Le 17/05/2021 à 22:48
La syntaxe est hyper proche de Python et l'exe compilé à la vitesse du C et se déploie comme un exe...
0  0 
Avatar de air-dex
Membre expert https://www.developpez.com
Le 20/05/2021 à 16:46
Citation Envoyé par Stan Adkens Voir le message
Microsoft, une entreprise favorable aux logiciels libres
Haters gonna hate.
0  0