Un serveur web ASGI, pour Python.
Documentation : https://www.uvicorn.org
Uvicorn est une implémentation de serveur Web ASGI pour Python.
Jusqu'à récemment, Python manquait d'une interface serveur/application minimale de bas niveau pour les frameworks asynchrones. La spécification ASGI comble cette lacune et signifie que nous sommes désormais en mesure de commencer à créer un ensemble commun d'outils utilisables dans tous les frameworks asynchrones.
Uvicorn prend en charge HTTP/1.1 et WebSockets.
Installer en utilisant pip
:
$ pip install uvicorn
Cela installera uvicorn avec des dépendances minimales (Python pur).
$ pip install ' uvicorn[standard] '
Cela installera uvicorn avec des dépendances "basées sur Cython" (si possible) et d'autres "extras facultatifs".
Dans ce contexte, « basé sur Cython » signifie ce qui suit :
uvloop
sera installée et utilisée si possible.httptools
si possible.De plus, les « extras optionnels » signifient que :
websockets
(si vous souhaitez utiliser wsproto
vous devrez l'installer manuellement) si possible.--reload
en mode développement utilisera watchfiles
.colorama
installé pour les journaux colorés.python-dotenv
sera installé si vous souhaitez utiliser l'option --env-file
.PyYAML
sera installé pour vous permettre de fournir un fichier .yaml
à --log-config
, si vous le souhaitez. Créez une application, dans example.py
:
async def app ( scope , receive , send ):
assert scope [ 'type' ] == 'http'
await send ({
'type' : 'http.response.start' ,
'status' : 200 ,
'headers' : [
( b'content-type' , b'text/plain' ),
],
})
await send ({
'type' : 'http.response.body' ,
'body' : b'Hello, world!' ,
})
Exécutez le serveur :
$ uvicorn example:app
Les frameworks Web Python les plus bien établis ont commencé comme des frameworks basés sur WSGI.
Les applications WSGI sont un appelable unique et synchrone qui prend une requête et renvoie une réponse. Cela ne permet pas d'établir des connexions de longue durée, comme c'est le cas avec les connexions HTTP ou WebSocket à interrogation longue, que WSGI ne prend pas bien en charge.
Avoir un modèle de concurrence asynchrone permet également des options telles que des tâches en arrière-plan légères, et peut être moins un facteur limitant pour les points de terminaison qui ont de longues périodes de blocage sur les E/S réseau, comme le traitement de requêtes HTTP lentes.
L'un des points forts du protocole ASGI est qu'il dissocie l'implémentation du serveur du cadre d'application. Cela permet de créer un écosystème de serveurs Web et de cadres d'application interopérables.
La première implémentation de serveur ASGI, initialement développée pour alimenter les canaux Django, est le serveur Web Daphné.
Il est largement exécuté en production et prend en charge HTTP/1.1, HTTP/2 et WebSockets.
N'importe lequel des exemples d'applications donnés ici peut également être exécuté en utilisant daphne
.
$ pip install daphne
$ daphne app:App
Hypercorn faisait initialement partie du framework Web Quart, avant d'être séparé en un serveur ASGI autonome.
Hypercorn prend en charge HTTP/1.1, HTTP/2 et WebSockets.
Il prend également en charge l'excellent framework trio
async, comme alternative à asyncio
.
$ pip install hypercorn
$ hypercorn app:App
Mangum est un adaptateur permettant d'utiliser des applications ASGI avec AWS Lambda et API Gateway.
Granian est un serveur HTTP Rust compatible ASGI qui prend en charge HTTP/2, TLS et WebSockets.
Uvicorn est un code sous licence BSD.
Conçu et fabriqué avec soin.
— ? —