Está vivo! Flask 2.0 lançado

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.








All Articles