Sem o conhecimento de todos, em 12 de maio de 2021, uma nova versão da famosa microframework Flask foi lançada. Embora pareça que o Flask já tem tudo, bem, quase tudo que é necessário para um microframework.
Antecipando o interesse, e o que há de novo, vou deixar um link para o log de alterações .
Dos recursos de venda da nova versão:
Suspensão do suporte para Python versão 2. Mínimo de Python 3.6
Suporte para visualizações assíncronas e outros retornos de chamada, como manipuladores de erros definidos com async def. As visualizações síncronas regulares continuam a funcionar sem alterações. Os recursos ASGI, como websockets, não são suportados.
Adicione decoradores de rota para métodos de API HTTP comuns.
@ app.post ("/ login") == @ app.route ("/ login", methods = ["POST"])
Nova função Config.from_file para carregar a configuração de qualquer formato de arquivo.
O comando flask shell ativa a conclusão da guia como um shell python normal.
Ao servir arquivos estáticos, os navegadores armazenam em cache com base no conteúdo, em vez de em um cronômetro de 12 horas. Isso significa que as alterações no conteúdo estático, como estilos CSS, serão refletidas imediatamente no recarregamento, sem a necessidade de limpar o cache.
Considere assincronia
Tudo ficaria bem, mas logo no início após a instalação o módulo asgiref não foi encontrado. Vamos instalá-lo manualmente.
Por exemplo, vamos escrever o aplicativo mais simples: Ping / Pong. Não tem muito sentido e lógica complexa, apenas imita alguma checagem se o serviço está vivo. Além disso, este aplicativo se tornará uma referência.
from flask import Flask
app = Flask(__name__)
@app.get('/')
async def ping():
return {'message': 'pong'}
if __name__ == '__main__':
app.run(host='0.0.0.0')
Implantar
Como dizia o log de alterações: "As funções ASGI, como websockets, não são suportadas."
Ou seja, a única maneira de implantar um aplicativo é usando o gunicorn.
: gunicorn -w 8 --bind 0.0.0.0:5000 app:app
-w 8 - 8
--bind 0.0.0.0:5000 -
: wrk -t 8 -c 100 -d 5 http://localhost:5000
Flask 2.0:
Running 5s test @ http://localhost:5000
8 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 17.80ms 2.37ms 36.95ms 91.92%
Req/Sec 673.44 163.80 3.86k 99.75%
26891 requests in 5.10s, 4.21MB read
Requests/sec: 5273.84
Transfer/sec: 844.69KB
Flask 2.0:
Running 5s test @ http://localhost:5000
8 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.91ms 842.62us 21.56ms 89.86%
Req/Sec 2.38k 410.20 7.64k 93.53%
95301 requests in 5.10s, 14.91MB read
Requests/sec: 18689.25
Transfer/sec: 2.92MB
Flask 1.1.2:
Running 5s test @ http://localhost:5000
8 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 4.98ms 823.42us 17.40ms 88.55%
Req/Sec 2.37k 505.28 12.23k 98.50%
94522 requests in 5.10s, 14.78MB read
Requests/sec: 18537.84
Transfer/sec: 2.90MB
, 1 2 ( ). Flask 2.0 , dev view . ASGI , uvicorn. .
major , . , . Flask, , Django.
Se você tiver alguma idéia do motivo pelo qual esses resultados foram obtidos, compartilhe-a nos comentários.