La programmation basée sur les entrées/sorties asynchrones en Python : cas d'utilisations, fonctionnement interne, contraintes et styles de programmation.
Programmation asynchrone, entrées/sorties non-bloquantes, boucle d'événements, beaucoup de développeurs ont rencontré ces expressions sans forcément savoir de quoi il s'agit concrètement. Mis à la mode par Node.js, les serveurs web asynchrones ont des caractéristiques particulières et ne viennent pas sans contraintes.
Dans cette présentation, je commencerai par expliquer à l'aide d'analogies en quoi consiste les entrées/sorties asynchrones, quels problèmes elles peuvent résoudre et quels problèmes elles ne résolvent pas. Nous verrons ensuite quelques exemples d'utilisation simples puis nous étudierons le fonctionnement interne d'une boucle d'événements d'entrées/sorties.
Les bases étant posées, nous explorerons alors les différents styles de programmation possibles en nous basant sur des exemples plus avancés basés sur les frameworks Tornado et aiohttp, jusqu'à présenter les nouveaux mot-clés async/await de Python 3.5. Chaque exemple sera accompagné d'une mesure de performance mettant en évidence l'impact de l'utilisation des entrées/sorties asynchrones.
Pour illustrer les notions abordées par des cas d'utilisation réels, je présenterais deux projets auxquels j'ai contribué dans le cadre de ma mission à Météo France et qui utilisent les entrées/sorties asynchrones de manière atypique : le gestionnaire de processus Circus et le proxy HTTP THR.