Un servidor web ASGI, para Python.
Documentación : https://www.uvicorn.org
Uvicorn es una implementación de servidor web ASGI para Python.
Hasta hace poco, Python carecía de una interfaz mínima de servidor/aplicación de bajo nivel para marcos asíncronos. La especificación ASGI llena este vacío y significa que ahora podemos comenzar a construir un conjunto común de herramientas utilizables en todos los marcos asíncronos.
Uvicorn admite HTTP/1.1 y WebSockets.
Instalar usando pip
:
$ pip install uvicorn
Esto instalará uvicorn con dependencias mínimas (Python puro).
$ pip install ' uvicorn[standard] '
Esto instalará uvicorn con dependencias "basadas en Cython" (cuando sea posible) y otros "extras opcionales".
En este contexto, "basado en Cython" significa lo siguiente:
uvloop
se instalará y utilizará si es posible.httptools
si es posible.Además, "extras opcionales" significa que:
websockets
(si desea utilizar wsproto
deberá instalarlo manualmente) si es posible.--reload
en modo de desarrollo utilizará watchfiles
.colorama
instalado para los registros de colores.python-dotenv
si desea utilizar la opción --env-file
.PyYAML
para permitirle proporcionar un archivo .yaml
a --log-config
, si lo desea. Crea una aplicación, en 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!' ,
})
Ejecute el servidor:
$ uvicorn example:app
La mayoría de los marcos web Python bien establecidos comenzaron como marcos basados en WSGI.
Las aplicaciones WSGI son invocables únicas y sincrónicas que reciben una solicitud y devuelven una respuesta. Esto no permite conexiones de larga duración, como las que se obtienen con las conexiones HTTP o WebSocket de sondeo prolongado, que WSGI no admite bien.
Tener un modelo de simultaneidad asíncrona también permite opciones como tareas ligeras en segundo plano y puede ser un factor menos limitante para los puntos finales que tienen períodos largos de bloqueo en la E/S de la red, como lidiar con solicitudes HTTP lentas.
Una ventaja del protocolo ASGI es que desacopla la implementación del servidor del marco de la aplicación. Esto permite un ecosistema de servidores web y marcos de aplicaciones interoperativos.
La primera implementación de servidor ASGI, desarrollada originalmente para impulsar los canales Django, es el servidor web Daphne.
Se ejecuta ampliamente en producción y es compatible con HTTP/1.1, HTTP/2 y WebSockets.
Cualquiera de las aplicaciones de ejemplo proporcionadas aquí se puede ejecutar igualmente utilizando daphne
.
$ pip install daphne
$ daphne app:App
Hypercorn fue inicialmente parte del marco web Quart, antes de separarse en un servidor ASGI independiente.
Hypercorn admite HTTP/1.1, HTTP/2 y WebSockets.
También es compatible con el excelente marco trio
async, como alternativa a asyncio
.
$ pip install hypercorn
$ hypercorn app:App
Mangum es un adaptador para utilizar aplicaciones ASGI con AWS Lambda y API Gateway.
Granian es un servidor Rust HTTP compatible con ASGI que admite HTTP/2, TLS y WebSockets.
Uvicorn es un código con licencia BSD.
Diseñado y elaborado con cuidado.
- ? —