Dans cet article, nous présentons plusieurs serveurs web Python que vous pouvez utiliser pour déployer vos applications Python.

Nous commencerons par comprendre le fonctionnement des serveurs web et la nécessité d’interfaces de passerelle de serveur. Ensuite, nous passerons en revue la liste des serveurs web Python ainsi que leurs principales caractéristiques. La plupart d’entre eux sont disponibles sous forme de paquets PyPI que vous pouvez installer et commencer à utiliser dans vos projets.

Commençons !

Qu’est-ce qu’un serveur web ?

Lorsque vous développez une application Python, vous utilisez le serveur de développement pour tester votre application. Cependant, une fois le développement terminé, vous devrez déployer votre application sur un serveur de production. Parmi plusieurs couches de fonctionnalités supplémentaires, un serveur web doit avoir les fonctionnalités de base d’un serveur HTTP.

python-web-server

Le serveur web Python doit être capable de traiter les requêtes HTTP (requêtes HTTP simples telles que GET, PUT et POST) des clients, tels que les navigateurs web, et de renvoyer la réponse. Cette réponse peut inclure le code d’état HTTP indiquant si la requête a été traitée avec succès ou non. Elle peut se composer de pages web HTML et de données semi-structurées telles que JSON, XML, etc.

ASGI vs. WSGI : Comprendre les interfaces de passerelle de serveur

Supposons que vous ayez développé une application Python dans le cadre de votre choix, par exemple Django ou Flask. Un serveur classique peut être incapable de comprendre et de traiter les requêtes adressées à l’application Python. C’est là que les interfaces de passerelle de serveur entrent en jeu.

Cette interface peut être une interface de passerelle de serveur Web(WSGI) ou une interface de passerelle de serveur asynchrone(ASGI). Le serveur web reçoit une requête d’un client, qu’il redirige ensuite vers l’interface de passerelle de serveur. L’interface (WSGI/ASGI) interagit avec l’application Python par l’intermédiaire d’un appel exposé.

python-web-server-asgi-wsgi

L’interfaceWSGI (Web Server Gateway Interface) traite les demandes de manière séquentielle. S’il y a plusieurs requêtes HTTP lentes, elles auront un impact sur le débit.

L’interface ASGI (Asynchronous Server Gateway Interface) succède à WSGI et permet de traiter les requêtes de manière asynchrone.

Supposons qu’une requête en cours de traitement nécessite la lecture d’une base de données (ce qui peut prendre beaucoup de temps) et qu’elle attende la réponse. Lorsque la première demande attend une réponse, ASGI peut traiter une deuxième demande entrante.

Contrairement à WSGI, la première requête doit être traitée avant la seconde. Par conséquent, l’utilisation d’ASGI peut entraîner une augmentation du débit. ASGI vous permet également d’utiliser les capacités asynchrones de Python dans votre application.

Serveurs Web Python

Dressons maintenant la liste des serveurs web que vous pouvez utiliser pour vos applications Python. Nous avons également inclus certains frameworks qui fournissent un support prêt à l’emploi pour des serveurs prêts à la production. Cette liste n’est pas exhaustive et les serveurs web recommandés ci-dessous ne sont pas classés dans un ordre particulier.

Uvicorn

Si vous êtes familier avec le développement d’applications avec FastAPI, vous avez certainement rencontré Uvicorn, une implémentation de serveur web. Uvicorn est une implémentation de serveur ASGI pour Python.

python-web-server-uvicorn

Pour installer Uvicorn et les dépendances associées à l’aide de pip, exécutez la commande suivante :

$ pip install uvicorn[standard] 
# inclut l'installation des dépendances optionnelles et basées sur Cython

Voici les principales caractéristiques d’Uvicorn :

  • Implémentation ASGI
  • Prise en charge de l’exécution d’applications à partir d’un environnement Python asynchrone
  • L’outil en ligne de commande avec une liste étendue d’options
  • Prise en charge de l’exécution d’applications à partir de fonctions d’usine
  • Fonctionnalités permettant de contrôler les instances de serveur de manière programmatique

Gunicorn

Gunicorn est un serveur WSGI pour les applications Python, bien connu pour ses fonctionnalités avancées de gestion des processus.

gunicorn-python-web-server

Uvicorn fournit une classe de travailleur Gunicorn, ce qui vous permet d’obtenir simultanément des avantages en termes de performances et de gestion des processus. Cette page de documentation contient des détails sur le déploiement de Gunicorn.

Si vous avez Python 3.5 et plus, vous pouvez installer Gunicorn en utilisant pip :

$ pip install gunicorn

Voici les principales caractéristiques de Gunicorn :

  • Simple et rapide
  • Compatible avec de nombreux frameworks web
  • Prise en charge de l’utilisation d’un serveur proxy HTTP
  • Gestion avancée des processus

CherryPy

CherryPy est un framework web Python – tout comme Django, Flask, et FastAPI – mais pas aussi populaire que ces frameworks. Avec plusieurs versions stables, CherryPy existe et a évolué en un framework à part entière depuis plus d’une décennie. Il bénéficie également du soutien d’une communauté de développeurs.

cherrypy

Vous pouvez consulter l’intéressant Zen of CherryPy, qui montre que CherryPy est un framework simple et minimaliste, mais puissant.

CherryPy est un framework Python et non un serveur web, mais il figure sur notre liste car il supporte nativement un serveur de production, contrairement à la plupart des autres frameworks.

Pour installer CherryPy et commencer, exécutez :

$ pip install CherryPy

Voici les principales caractéristiques de CherryPy :

  • Cadre de travail pythonique utilisant Python orienté objet ; bien adapté aux débutants
  • Prise en charge d’un serveur HTTP prêt pour la production, Cheroot
  • Plus facile à apprendre que d’autres frameworks web, tels que Django
  • Prise en charge de la construction et du déploiement d’applications web simples vers des microservices

Daphne

Django est l’un des frameworks web Python les plus populaires. Si vous avez développé des applications avec Django, vous avez probablement utilisé le serveur web Daphne. Daphne est l’une des premières implémentations de serveur ASGI utilisées comme référence pour les implémentations de serveur ASGI.

Daphne est disponible sous la forme d’un paquet PyPI que vous pouvez installer à l’aide de pip.

$ pip install daphne

Voici un tutoriel détaillé qui vous guidera dans la construction d’une application Python complète prête pour la production.

Voici les principales caractéristiques de Daphne :

  • Largement adopté dans les environnements de production
  • Référence pour toutes les implémentations de serveurs ASGI
  • Prise en charge des protocoles HTTP, HTTP2 et WebSocket

Python Trio

Le projet Trio vise à fournir des capacités d’E/S asynchrones de niveau production : prise en charge des E/S parallèles et de la concurrence. Ce projet comporte également plusieurs bibliothèques Python pour le web et le HTTP.

Vous pouvez installer la dernière version de Trio (juin 2022) depuis PyPI.

$ pip install trio

Voici une liste de bibliothèques Trio utiles pour la programmation web avec Python :

  • hypercorn: Hypercorn est un serveur ASGI qui supporte HTTP
  • muffin: Muffin est un framework web ASGI pour Python
  • startlette: Starlette est un cadre ASGI léger
  • trio-websocket : support pour le <a href="https://geekflare.com/fr/websocket-servers/">serveur</a> et le client <a href="https://geekflare.com/fr/websocket-servers/">WebSocket</a> </li><li><code>httpx: Client HTTP pour Python

Twisted Web

Twisted est un cadre de travail pour les applications Python. Ce framework événementiel comprend un module de programmation web appelé twisted.web.

Vous pouvez installer Twisted et les modules associés à l’aide de pip :

$ pip install Twisted

Voici les principales caractéristiques de Twisted :

  • Fonctionnalités conviviales pour les développeurs, telles que les tests unitaires et la vérification statique du code
  • twisted.web fournit un serveur WSGI et prend en charge les clients et serveurs HTTP

AIOHTTP

AIOHTTP est une bibliothèque Python qui fournit des fonctionnalités côté client et côté serveur via les API client et serveur.

Voici une vidéo utile expliquant les capacités de programmation asynchrone du côté client, qui permettent d’accélérer considérablement les demandes d’API.

Voici les principales caractéristiques d’AIOHTTP :

  • Prise en charge des fonctionnalités du serveur et du client HTTP
  • Prise en charge de la journalisation pour faciliter le débogage ; fournit une journalisation pour un client, un serveur, des sockets web, etc
  • Support natif pour les tests à travers le plugin de test pytest : pytest-aiohttp, qui est disponible en tant que paquetage PyPI

Tornado

Tornado est un autre framework web Python qui supporte les réseaux asynchrones. Ces dernières années, il y a eu de nombreuses versions stables de Tornado – la version la plus récente, la 6.2, a été publiée en juillet 2022. Actuellement, Tornado prend en charge Python 3.7 et les versions ultérieures.

Comme la plupart des paquets de cette liste, Tornado peut également être installé à l’aide de pip:

$ pip install tornado

Voici les principales caractéristiques de Tornado :

  • Prise en charge du serveur HTTP tornado.httpserver et du client
  • Évolutif et utilise des E/S réseau non bloquantes
  • Bien adapté aux applications qui requièrent une connectivité pour un intervalle de temps beaucoup plus long
  • Utilitaires pour la journalisation, les tests unitaires, etc
  • Intégration transparente avec des services d’authentification

Meinheld

Meinheld est un serveur WSGI pour Python. Il utilise et construit des bibliothèques existantes pour la gestion des événements et le traitement des requêtes HTTP.

Vous pouvez installer Meinheld en utilisant pip :

$ pip install meinheld

Quelques caractéristiques de Meinheld :

  • Utilise la bibliothèque http-parser pour traiter les requêtes HTTP entrantes
  • S’appuie sur la bibliothèque picoev pour la gestion des événements

Conclusion

J’espère que cet article sur les serveurs web Python vous a été utile. N’hésitez pas à les essayer dans vos futurs projets. Nous avons énuméré les principales fonctionnalités ; pour comprendre pleinement les dépendances et leur fonctionnement, vous devrez les utiliser dans vos applications. 👩🏽‍💻

Si vous souhaitez améliorer vos compétences en Python, vous pouvez consulter la bibliothèque de tutoriels Python de Geekflare. Bon codage !