09/01/2017

Google libère Grumpy, son environnement d’exécution Python développé en Go

La firme de Mountain View propose les codes sources du serveur permettant à YouTube de surmonter les limitations actuelles du langage Python.

YouTube et Python

Peu de gens le savent, mais la plateforme de partage de vidéo en ligne la plus populaire au monde repose principalement sur le langage Python. Youtube.com ainsi que ses interfaces de programmations utilisent Cpython 2.7 pour traiter des millions de requêtes par seconde. Dans ce contexte, les équipes de Google ont mis la barre haute pour l’optimisation de l’application. Cependant, ces mêmes équipes constatent que malgré le travail accompli, elles sont toujours confrontées à la difficulté de produire avec Python de bons rendements sur des charges simultanées.

La recherche de solutions alternatives a mené les ingénieurs de la firme à tester d’autres environnements d’exécution, sans succès. C’est alors qu’ils ont pris la décision de développer leur propre implémentation, optimisée pour les services en temps réel. À cette époque, le langage Go semblait être le choix idéal pour la plateforme de vidéos. Il possédait des qualités opérationnelles concordantes avec les contextes d’utilisation. Notamment, la possibilité d’utiliser des threads légers a poussé l’équipe à aller plus avant, englobant Python dans Go dans un projet dénommé Grumpy.

Grumpy

Grumpy se présente donc comme un environnement d’exécution expérimental Python pour Go. Grumpy traduit le code Python en langage Go et les programmes ainsi « transpilés » s’exécutent de façon transparente dans le runtime Go. Avec un haut de degrés de compatibilité avec Cpython, Grumpy se pose finalement en alternative d’environnement d’exécution de remplacement pour tous les projets écrits nativement en Python.

Des choix de conceptions radicaux

Pour permettre une mise au point efficiente de Grumpy, des choix de conception radicaux ont dû être faits. Parmi ces choix, il ne sera pas possible d’exploiter les extensions Python C existantes. Outre une grande flexibilité pour la création des APIs, cela permet notamment faire reposer sur Go une grande partie du cycle de vie des objets en mémoire.

grumpy-cpython

Grumpy ne pas non plus être considéré comme un interpréteur Python. Les programmes Grumpy sont traités en compilation et édition de lien comme des programmes Go. Cet arbitrage qui fait perdre à Grumpy de la flexibilité de développement et de déploiement offre en revanche de plus grandes possibilités d’optimisation avec une analyste statique du programme. Qui plus est, l’interopérabilité avec Go permet à Grumpy permet d’importer des paquets Go à la manière des modules Python.

Un projet toujours en développement

Le billet publié sur le blog Google Open Source est clair sur ce point : la publication est au stade initial et de nombreux manques restent à compléter pour les types, méthodes et attributs. La bibliothèque standard est aussi très mince. Bien que le projet soit quasi intégralement orienté vers le support de Python 2.7, l’équipe espère que des contributeurs pourront le faire évoluer vers une compatibilité avec Python 3, une tâche qui s’avère particulièrement chronophage.

Actualités