Um servidor web ASGI, para Python.
Documentação : https://www.uvicorn.org
Uvicorn é uma implementação de servidor web ASGI para Python.
Até recentemente, o Python carecia de uma interface mínima de servidor/aplicativo de baixo nível para estruturas assíncronas. A especificação ASGI preenche essa lacuna e significa que agora podemos começar a construir um conjunto comum de ferramentas utilizáveis em todas as estruturas assíncronas.
Uvicorn suporta HTTP/1.1 e WebSockets.
Instale usando pip
:
$ pip install uvicorn
Isso instalará o uvicorn com dependências mínimas (Python puro).
$ pip install ' uvicorn[standard] '
Isto irá instalar o uvicorn com dependências "baseadas em Cython" (quando possível) e outros "extras opcionais".
Neste contexto, "baseado em Cython" significa o seguinte:
uvloop
será instalado e usado, se possível.httptools
se possível.Além disso, “extras opcionais” significa que:
websockets
(se você quiser usar wsproto
será necessário instalá-lo manualmente), se possível.--reload
no modo de desenvolvimento usará watchfiles
.colorama
instalado para os logs coloridos.python-dotenv
será instalado caso você queira usar a opção --env-file
.PyYAML
será instalado para permitir que você forneça um arquivo .yaml
para --log-config
, se desejar. Crie um aplicativo, em 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!' ,
})
Execute o servidor:
$ uvicorn example:app
Os frameworks Python Web mais bem estabelecidos começaram como frameworks baseados em WSGI.
Os aplicativos WSGI são uma chamada única e síncrona que recebe uma solicitação e retorna uma resposta. Isso não permite conexões de longa duração, como as que você obtém com conexões HTTP ou WebSocket de pesquisa longa, que o WSGI não suporta bem.
Ter um modelo de simultaneidade assíncrona também permite opções como tarefas leves em segundo plano e pode ser um fator menos limitante para endpoints que têm longos períodos de bloqueio na E/S da rede, como lidar com solicitações HTTP lentas.
Um ponto forte do protocolo ASGI é que ele separa a implementação do servidor da estrutura do aplicativo. Isso permite um ecossistema de servidores web e estruturas de aplicativos interoperantes.
A primeira implementação de servidor ASGI, originalmente desenvolvida para potencializar canais Django, é o servidor web Daphne.
Ele é amplamente executado em produção e oferece suporte a HTTP/1.1, HTTP/2 e WebSockets.
Qualquer um dos aplicativos de exemplo fornecidos aqui pode igualmente ser executado usando daphne
.
$ pip install daphne
$ daphne app:App
O Hypercorn fazia inicialmente parte da estrutura web Quart, antes de ser separado em um servidor ASGI independente.
O Hypercorn oferece suporte a HTTP/1.1, HTTP/2 e WebSockets.
Ele também suporta o excelente framework trio
async, como alternativa ao asyncio
.
$ pip install hypercorn
$ hypercorn app:App
Mangum é um adaptador para usar aplicativos ASGI com AWS Lambda e API Gateway.
Granian é um servidor Rust HTTP compatível com ASGI que suporta HTTP/2, TLS e WebSockets.
Uvicorn é um código licenciado BSD.
Projetado e fabricado com cuidado.
— ? -