Article de reference

CPython

( Learn how and when to remove this message ) CPython est l' implémentation de référence du langage de programmation Python . Écrit en C et en Python, CPython est l'implémentati...

implémentation de référence du langage de programmation Python . Écrit en C et en Python, CPython est l'implémentation par défaut et la plus utilisée du langage Python.

CPython peut être défini à la fois comme un interpréteur et un compilateur , car il compile le code Python en bytecode avant de l'interpréter. Il possède une interface de fonctions externes avec plusieurs langages, dont le C, pour lesquels il est nécessaire de définir explicitement les liaisons dans un langage autre que Python.

verrou global d'interpréteur (GIL), ce qui garantit que pour chaque processus d'interpréteur CPython , un seul thread peut traiter du bytecode à la fois. Cela ne signifie pas pour autant que le multithreading est inutile ; le scénario le plus courant est celui où les threads attendent principalement la fin de processus externes.

Cela peut se produire lorsque plusieurs threads traitent des données de clients distincts. Un thread peut attendre la réponse d'un client, un autre l'exécution d'une requête de base de données , tandis que le troisième thread exécute du code Python.

Cependant, le GIL signifie que CPython n'est pas adapté aux processus qui implémentent des algorithmes gourmands en ressources CPU dans du code Python susceptible d'être distribué sur plusieurs cœurs.

Dans les applications concrètes, les situations où le GIL constitue un goulot d'étranglement important sont plutôt rares. En effet, Python est un langage intrinsèquement lent et n'est généralement pas utilisé pour des opérations gourmandes en ressources CPU ou sensibles au temps. Python est généralement utilisé au niveau supérieur et appelle des fonctions de bibliothèques pour effectuer des tâches spécialisées. Ces bibliothèques ne sont généralement pas écrites en Python, et du code Python peut être exécuté dans un autre thread pendant qu'un appel à l'un de ces processus sous-jacents a lieu. La bibliothèque non-Python appelée pour effectuer la tâche gourmande en ressources CPU n'est pas soumise au GIL et peut exécuter simultanément de nombreux threads sur plusieurs processeurs sans restriction.

L'exécution concurrente de code Python n'est possible qu'avec des processus d'interpréteur CPython distincts, gérés par un système d'exploitation multitâche . Cela complexifie la communication entre ces processus , même si le module multiprocessing atténue quelque peu ce problème ; ainsi, les applications qui tirent réellement parti de l'exécution concurrente de code Python peuvent être implémentées avec une surcharge limitée .

La présence du GIL simplifie l'implémentation de CPython et facilite la création d'applications multithread qui ne tirent pas profit de l'exécution concurrente de code Python. En revanche, sans GIL, les applications multiprocessus doivent s'assurer que tout le code partagé est thread-safe.

Bien que de nombreuses propositions aient été faites pour éliminer le GIL, il est généralement admis que, dans la plupart des cas, ses avantages l'emportent sur ses inconvénients. Dans les rares cas où le GIL constitue un goulot d'étranglement, l'application devrait être conçue autour d'une architecture multiprocessus. Afin de favoriser un plus grand parallélisme, une amélioration a été publiée en octobre 2023 permettant d'utiliser un GIL distinct par sous-interpréteur au sein d'un même processus Python ; ce système a été décrit comme des « threads avec partage optionnel ».

Après plusieurs débats, un projet a été lancé en 2023 pour proposer de rendre le GIL optionnel à partir de la version 3.13 de Python, qui a été publiée le 7 octobre 2024, dans Python 3.13.0.

Histoire

par Google et nommée Unladen Swallow a été créée pour intégrer un compilateur JIT (Just-In-Time) à CPython. Son développement s'est arrêté en 2011 sans qu'elle soit fusionnée avec l'implémentation principale, bien que certains éléments de son code, comme les améliorations apportées au module cPickle, y aient été intégrés.

En 2021, un « interpréteur adaptatif spécialisé » (SAI) a été proposé. Ce dernier permettrait d'améliorer les performances de 10 à 60 % en spécialisant les instructions fréquemment exécutées, présentant une stabilité de type apparente , en instructions plus rapides et spécifiques à leur type. Il pourrait également déspécialiser les instructions si nécessaire. Le SAI a été intégré pour la première fois à Python 3.11, qui, selon la suite de tests « pyperformance », était en moyenne 25 % plus rapide que Python 3.10.

En 2024, un compilateur JIT expérimental a été intégré à la branche de développement principale de CPython. Ce compilateur JIT préliminaire repose sur LLVM et vise à accélérer l'exécution des portions de code fréquemment utilisées . Au moment de l'intégration, il n'était pas encore inclus dans les configurations de compilation par défaut de CPython et offrait des performances similaires à celles du SAI ; l'une des conditions pour son adoption généralisée était un gain de performance d'au moins 5 %. Il reste désactivé par défaut, mais les utilisateurs peuvent l'activer pour expérimenter et observer comment Python pourrait à terme rivaliser avec d'autres langages utilisant la compilation JIT.

Distribution

Les plateformes de niveau 1 officiellement prises en charge sont Linux pour Intel 64 bits avec une chaîne d'outils GCC, macOS pour Intel et ARM 64 bits, et Microsoft Windows pour Intel 32 et 64 bits. La prise en charge officielle de niveau 2 concerne Linux pour ARM 64 bits, wasm32 ( WebAssembly ) avec prise en charge de l'environnement d'exécution WASI, et Linux pour Intel 64 bits avec une chaîne d'outils clang. Les systèmes de niveau 3 officiellement pris en charge incluent Windows ARM 64 bits, iOS 64 bits, Raspberry Pi OS (Linux pour armv7 avec virgule flottante matérielle), Linux pour PowerPC 64 bits en mode little-endian, et Linux pour s390x .

D'autres plateformes disposent d'implémentations fonctionnelles, notamment :

De type Unix
AIX
  • BSD
  • Darwin
  • FreeBSD
  • HP-UX
  • illumos
  • Linux
  • macOS
  • NetBSD
  • OpenBSD
  • Plan 9
  • Solaris
  • Tru64
  • Spécial et intégré
    Androïde
  • Apple iOS (prise en charge des versions obsolètes de Python 3.6 et 2.7 disponible)
  • BlackBerry 10
  • GP2X
  • iPod Linux
  • Nintendo DS
  • GameCube
  • Système d'exploitation Symbian Série 60
  • Tablette Internet Nokia 770
  • NokiaN800
  • Nokia N810
  • NokiaN900
  • Openmoko
  • Palm OS
  • PlayStation 2
  • PlayStation 3 (FreeBSD)
  • Psion
  • QNX
  • Zaurus tranchant
  • Xbox / XBMC
  • VxWorks
  • Autre
    AROS
  • OS/390
  • Windows 8 et versions ultérieures
  • z/OS
  • La PEP 11 liste les plateformes non prises en charge par CPython et la Python Software Foundation . Ces plateformes peuvent néanmoins être prises en charge par des ports externes. Ces ports incluent :

    AtheOS (non pris en charge depuis la version 2.6)
  • BeOS (non pris en charge depuis la version 2.6)
  • DOS (non pris en charge depuis la version 2.0)
  • IRIX 4 (non pris en charge depuis la version 2.3)
  • IRIX 5 et versions ultérieures (non pris en charge depuis les versions 3.2 et 3.7)
  • Mac OS 9 (non pris en charge depuis la version 2.4)
  • MINIX (non pris en charge depuis la version 2.3)
  • OpenVMS (non pris en charge depuis la version 3.3)
  • OS/2 (non pris en charge depuis la version 3.3)
  • RISC OS (non pris en charge depuis la version 3.0)
  • Windows : En règle générale, les versions de Windows continuent de bénéficier d’un support de niveau 1 complet tant qu’elles sont couvertes par la politique de cycle de vie du support étendu de Microsoft. Une fois la période de support étendu de Microsoft expirée pour une ancienne version de Windows, le projet ne prendra plus en charge cette version dans la prochaine version majeure (XY0) de Python. Cependant, les versions correctives (0.0.Z) de chaque branche de distribution conserveront la prise en charge de toutes les versions de Windows prises en charge dans la version XY0 initiale. Les éditions de Windows destinées aux systèmes embarqués et à l’Internet des objets (IoT) ne sont pas couvertes par la politique de support officielle de Python.
    • Windows 8 (aucune prise en charge officielle dans les versions majeures de Python depuis le 10 janvier 2023)
    • Windows 7 (aucune prise en charge officielle dans les versions majeures de Python depuis le 14 janvier 2020)
    • Windows Vista (non pris en charge depuis la version 3.9)
    • Windows XP (non pris en charge depuis la version 3.5)
    • Windows 2000 (non pris en charge depuis la version 3.3)
    • Windows 3.x (non pris en charge depuis la version 2.0)
    • Windows 9x (non pris en charge depuis la version 2.6)
    • Windows NT4 (non pris en charge depuis la version 2.6)
  • Les ports externes non intégrés à la version officielle de CPython de la Python Software Foundation, et qui contiennent des liens vers son site de développement principal, incluent souvent des modules supplémentaires pour des fonctionnalités spécifiques à la plateforme, comme les API graphiques et sonores pour la PSP et les API SMS et caméra pour le S60. Ces ports incluent :

    Amiga : AmigaPython
  • IBM i : iSeriesPython
  • DOS utilisant DJGPP : PythonD
  • MorphOS : Python 2 et 3
  • PlayStation Portable : Python sans pile pour PSP
  • Système d'exploitation Symbian : Python pour S60
  • Windows CE / Pocket PC : Portage Python pour Windows CE
  • OpenVMS : Les ports de Python 3.x sont maintenus par VSI
  • Linux d'entreprise

    Ces versions de Python sont distribuées avec les distributions Linux d'entreprise actuellement prises en charge. Le statut de prise en charge de Python dans le tableau fait référence à la prise en charge par l'équipe principale de Python, et non par le responsable de la distribution.

    Linux d'entreprise
    Version de distributionFin de vie de la distributionVersion Python
    Ubuntu 22.04 LTS (Jammy Jellyfish)3.10
    Ubuntu 20.04 LTS (Focal Fossa)2030-04 Debian 122028-06 Debian 112026-06 Red Hat Enterprise Linux 82029CentOS 831 mai 2029SUSE Linux Enterprise Server 1531 juillet 2031
    CPython est l'une des nombreuses implémentations Python « de qualité professionnelle », parmi lesquelles : Jython , écrit en Java pour la machine virtuelle Java (JVM) ; PyPy , écrit en RPython et traduit en C ; et IronPython , écrit en C# pour l' infrastructure de langage commune (CLI ). Il existe également plusieurs implémentations expérimentales.

    ISBN9781775093343.

    Plus d articles de Worldlex Wiki

    Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

    Explorer l index