Article de reference

Python sans pile

( Learn how and when to remove this message ) Stackless Python , ou Stackless , était un interpréteur du langage de programmation Python . Son dépôt GitHub est archivé depuis fé...

du langage de programmation Python . Son dépôt GitHub est archivé depuis février 2025 et le projet est officiellement abandonné.

Il doit son nom au fait qu'il évite de dépendre de la pile d'appels C pour sa propre pile. En pratique, Stackless Python utilise la pile C, mais celle-ci est vidée entre chaque appel de fonction. La principale caractéristique de Stackless est l'utilisation de microthreads , qui permettent de réduire considérablement la surcharge associée aux threads classiques du système d'exploitation . Outre les fonctionnalités Python, Stackless prend également en charge les coroutines , les canaux de communication et la sérialisation des tâches .

noyau du système d'exploitation . La gestion du contexte et l'ordonnancement des tâches sont entièrement assurés par l'interpréteur (on parle alors de « green thread » ). Les microthreads gèrent l'exécution de différentes sous-tâches d'un programme sur le même cœur du processeur. Ils constituent ainsi une alternative à la programmation asynchrone événementielle et permettent d'éviter la surcharge liée à l'utilisation de threads séparés pour les programmes monocœurs (puisqu'il n'est pas nécessaire de basculer entre le mode utilisateur et le mode noyau, l'utilisation du processeur est réduite).

Bien que les microthreads facilitent l'exécution de sous-tâches sur un seul cœur, Stackless Python ne supprime pas le verrou global de l'interpréteur (GIL) de CPython et n'utilise pas non plus plusieurs threads ni processus. Il permet donc uniquement le multitâche coopératif sur un processeur partagé, et non le parallélisme (la préemption, initialement indisponible, l'est désormais sous une forme ou une autre ). Pour exploiter plusieurs cœurs de processeur, il serait nécessaire de mettre en place un système de communication interprocessus au-dessus des processus Stackless Python.

En raison du nombre considérable de modifications apportées au code source, Stackless Python ne peut pas être installé sur une installation Python préexistante en tant qu'extension ou bibliothèque . Il s'agit plutôt d'une distribution Python complète à part entière. La majorité des fonctionnalités de Stackless ont également été implémentées dans PyPy , un interpréteur Python et un compilateur JIT auto-hébergés .

Utiliser

Bien que Stackless soit une distribution distincte, sa fonctionnalité de commutation a été intégrée avec succès sous forme d' extension CPython appelée greenlet . Elle est utilisée par plusieurs bibliothèques (par exemple gevent ) pour fournir une solution de programmation asynchrone optimisée pour CPython. Python dispose depuis d'une solution native alternative pour la programmation asynchrone s'exécutant sur un seul thread : await /async.

Stackless est largement utilisé dans la mise en œuvre du jeu en ligne massivement multijoueur Eve Online ainsi que dans la plateforme de messagerie d' IronPort .