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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Python risque de perdre son Global Interpreter Lock, un composant clé de CPython


Sujet :

Python

  1. #1
    Chroniqueur Actualités
    Avatar de Bruno
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    mai 2019
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : mai 2019
    Messages : 496
    Points : 8 468
    Points
    8 468
    Par défaut Python risque de perdre son Global Interpreter Lock, un composant clé de CPython
    Python risque de perdre son Global Interpreter Lock, un composant clé de CPython,
    pour gagner beaucoup plus en rapidité

    Un nouveau projet visant à modifier le runtime CPython afin d'améliorer les performances multithread a attiré l'attention de l'équipe principale de développement de Python. Le développeur python Sam Gross a proposé une modification majeure du Global Interpreter Lock (GIL), l'implémentation de référence de Python. « J'ai travaillé sur des modifications de CPython pour lui permettre de s'exécuter sans le verrouillage global de l'interpréteur. J'aimerais partager une preuve du concept de fonctionnement sans le GIL. Cette preuve de concept implique des changements substantiels internes à CPython, mais relativement peu de changements à l'interface C-API. Elle est compatible avec de nombreuses extensions C », a déclaré Sam Gross.

    Rappelons que le Python Global Interpreter Lock, en termes simples, est un verrou qui permet à un seul thread de détenir le contrôle de l'interpréteur Python. Cela signifie qu'un seul thread peut être en état d'exécution à un moment donné. L'impact de le GIL n'est pas visible pour les développeurs qui exécutent des programmes monofilaires, mais elle peut constituer un goulot d'étranglement en termes de performances pour les codes multithread et liés au processeur.

    Nom : python.png
Affichages : 104968
Taille : 3,1 Ko

    Étant donné que le GIL ne permet l'exécution que d'un seul thread à la fois, même dans une architecture multithread avec plus d'un cœur de CPU, il a acquis la réputation d'être une fonctionnalité « déshonorante » de Python. Elle a longtemps été considérée comme un obstacle à l'amélioration des performances multithread de CPython (et donc de Python en général). De nombreux efforts ont été déployés pour la supprimer au fil des ans, mais au prix d'une dégradation des performances monothread (en d'autres termes, en rendant la grande majorité des applications Python existantes plus lentes).

    Les métaphores actuelles de Python pour traiter le threading et le multiprocessing ne rendent pas impossible la réalisation d'un parallélisme élevé. Mais elles rendent la tâche suffisamment difficile pour que les développeurs se tournent souvent vers des modules tiers comme Dask pour y parvenir. L'objectif de l'élimination de le GIL serait d'améliorer les performances des programmes multithreads. Toute proposition doit donc montrer qu'elle y parvient en pratique.

    L’équipe de développement de Python a déclaré qu'elle rejetterait toute proposition dans ce sens qui ralentirait les programmes monothread. La nouvelle proposition modifie la façon dont le comptage des références fonctionne pour les objets Python, de sorte que les références provenant du thread qui possède un objet sont traitées différemment de celles provenant d'autres threads. En début de ce mois, Python a été annoncé comme langage de programmation le plus populaire sur TIOBE dans l'édition d'octobre détrônant ainsi le C, une première en plus de 20 ans.

    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 récupérateur de mémoire et d'un système de gestion d'exceptions ; il ressemble ainsi à Perl, Ruby, Scheme, Smalltalk et Tcl. L'équipe de développement a annoncé le 4 octobre les améliorations et les nouvelles fonctionnalités de la version 3.11 de Python. Cette version améliore la localisation des erreurs dans les logs et optimise le formatage de style C avec un format littéral ne contenant que les codes de format %s, %r et %. Les compréhensions asynchrones sont maintenant autorisées à l'intérieur des compréhensions dans les fonctions asynchrones. Les compréhensions externes deviennent implicitement asynchrones.

    Python gagne en popularité ces temps-ci, en partie à cause de l'essor de la science des données et de son écosystème de bibliothèques logicielles d'apprentissage automatique comme NumPy, Pandas, TensorFlow de Google et PyTorch de Facebook. En effet, Python continuerait d'être la norme et la compétence la plus recherchée dans le domaine de la science des données, dépassant de loin les autres technologies et outils, comme R, SAS, Hadoop et Java. C'est ce que suggère une analyse réalisée par Terence Shin, un spécialiste des données, qui a indiqué que l'adoption de Python pour la science des données continue de croître alors même que le langage R, plus spécialisé, est en déclin.

    Python est également un langage facile à apprendre qui a trouvé une niche dans le matériel haut de gamme, mais moins dans les appareils mobiles et le Web un problème que le créateur de Python, Guido van Rossum, espère résoudre grâce à des améliorations de performances sur lesquelles il travaille chez Microsoft. L'effet global l’apport de Sam Gross, et d'un certain nombre d'autres modifications, augmente en fait légèrement les performances monothread d'environ 10 %, selon certains benchmarks réalisés sur une version fork de l'interpréteur par rapport à la version 3.9 de l'interpréteur CPython.

    Quel problème le GIL a-t-il résolu pour Python ?

    Python utilise le comptage de références pour la gestion de la mémoire. Cela signifie que les objets créés en Python ont une variable de comptage de références qui garde la trace du nombre de références qui pointent vers l'objet. Lorsque ce compte atteint zéro, la mémoire occupée par l'objet est libérée. Voici, ci-dessous, un bref exemple de code qui montre comment fonctionne le comptage de références :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import sys
    >>> a = []
    >>> b = a
    >>> sys.getrefcount(a)
    3
    Dans l'exemple ci-dessus, le nombre de références pour l'objet liste vide [] était de 3. L'objet liste était référencé par a, b et l'argument passé à sys.getrefcount().

    Le problème est que cette variable de comptage de références devait être protégée contre les conditions de course où deux threads augmentent ou diminuent sa valeur simultanément. Si cela se produit, cela peut provoquer une fuite de mémoire qui n'est jamais libérée ou, pire encore, une libération incorrecte de la mémoire alors qu'une référence à cet objet existe toujours. Cela peut provoquer des plantages ou d'autres bogues dans un programme Python.

    Cette variable de comptage des références peut être maintenue en sécurité en ajoutant des verrous à toutes les structures de données qui sont partagées entre plusieurs threads afin qu'elles ne soient pas modifiées de manière incohérente. Mais l'ajout d'un verrou à chaque objet ou groupe d'objets signifie que plusieurs verrous existeront, ce qui peut causer un autre problème : les blocages (les blocages ne peuvent se produire que s'il y a plus d'un verrou). Un autre effet secondaire serait une diminution des performances causée par l'acquisition et la libération répétées des verrous.

    Le GIL est un verrou unique sur l'interpréteur lui-même qui ajoute une règle selon laquelle l'exécution de tout bytecode Python nécessite l'acquisition du verrou de l'interpréteur. Cela empêche les blocages (puisqu'il n'y a qu'un seul verrou) et n'introduit pas beaucoup de surcharge de performance. Mais cela rend effectivement tout programme Python lié au CPU monothread.

    Le GIL, bien qu'utilisée par les interprètes d'autres langages comme Ruby, n'est pas la seule solution à ce problème. Certains langages évitent l'utilisation d'un GIL pour une gestion sécurisée de la mémoire en utilisant des approches autres que le comptage de références, comme le garbage collection. Si la proposition de Sam Gross est acceptée, son code réécrira la manière dont Python sérialise l'accès aux objets dans son runtime à partir de plusieurs threads, et améliorera considérablement les performances multithread.

    Source : Python.org

    Et vous ?

    Quel est votre avis sur le sujet ?

    Que pensez-vous de Python en général et de GIL en particulier ?

    Voir aussi :

    Python devient le langage de programmation le plus populaire sur TIOBE dans l'édition d'octobre et détrône C, une première en plus de 20 ans

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

    Une poignée de paquets contenant du code malveillant a été téléchargée 30 000 fois sur PyPI et près de la moitié des paquets sur PyPI ont au moins un problème de sécurité, annoncent des chercheurs

    La première version EAP de PyCharm 2021.3 est disponible, avec une toute nouvelle expérience Jupyter Notebook, le support de FastAPI et un meilleur support de Python 3.10
    Contribuez au club : corrections, suggestions, critiques, ... Contactez le service news et Rédigez des actualités

  2. #2
    Membre averti
    Profil pro
    DIRLO
    Inscrit en
    juillet 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DIRLO

    Informations forums :
    Inscription : juillet 2009
    Messages : 182
    Points : 439
    Points
    439
    Par défaut
    Heureusement que la news n'a pas été publiée un 1er avril :p

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    juillet 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : juillet 2008
    Messages : 66
    Points : 284
    Points
    284
    Par défaut At least...
    Le titre exact serait plutôt : Python pourrait ENFIN perdre son GIL.

    Nuance...

Discussions similaires

  1. Python afficher spectre du son
    Par Adrien88390 dans le forum Général Python
    Réponses: 3
    Dernier message: 20/09/2014, 10h24
  2. perdre son IP
    Par javaNavCha dans le forum Administration
    Réponses: 4
    Dernier message: 20/12/2011, 11h52
  3. Redirection sans perdre son référencement
    Par jimmplan dans le forum Référencement
    Réponses: 11
    Dernier message: 11/05/2010, 00h56
  4. reinstaller XP sans perdre son system linux!
    Par liquideshark dans le forum SUSE
    Réponses: 5
    Dernier message: 18/08/2008, 20h01
  5. Suite Nouvelle embauche : Peut on perdre son statut cadre ?
    Par nomade33 dans le forum Droit du travail
    Réponses: 4
    Dernier message: 08/09/2006, 11h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo