生きてる!Flask2.0がリリースされました

誰もが知らないうちに、2021年5月12日に、有名なFlaskマイクロフレームワークの新しいバージョンがリリースされました。Flaskにはすでにすべてのものがあるように見えましたが、まあ、マイクロフレームワークに必要なほとんどすべてのものがあります。

興味と新機能を予想して、変更ログへのリンクを残します





新しいバージョンの自動販売機能から:

  • Pythonバージョン2のサポートを終了しました。最小Python3.6





  • 非同期 ビューと、asyncdefで定義されたエラーハンドラーなどの他のコールバックのサポート通常の同期ビューは引き続き機能します。WebSocketなどのASGI機能はサポートされていません。





  • 一般的なHTTPAPIメソッドのルートデコレータを追加します。

    @ app.post( "/ login")== @ app.route( "/ login"、methods = ["POST"])





  • 任意のファイル形式から構成をロードするための新しい関数Config.from_file。





  • フラスコシェルコマンドは、通常のPythonシェルと同じようにタブ補完をオンにします。





  • 静的ファイルを提供する場合、ブラウザーは12時間のタイマーではなく、コンテンツに基づいてキャッシュします。つまり、CSSスタイルなどの静的コンテンツへの変更は、キャッシュをクリアしなくても、リロード時にすぐに反映されます。





非同期を考慮する

すべて問題ありませんが、インストール後の最初の段階では、asgirefモジュールが見つかりませんでした。手作業で取り付けます。





たとえば、最も単純なアプリケーションであるPing / Pongを作成してみましょう。それはあまり意味がなく複雑なロジックを持っていません、それはサービスが生きているかどうかのいくつかのチェックを模倣するだけです。また、このアプリケーションはベンチマークになります。





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')

      
      



デプロイ

変更ログに記載されているように、「WebSocketなどのASGI機能はサポートされていません。」

つまり、アプリケーションをデプロイする唯一の方法は、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.





これらの結果が得られた理由について何かアイデアがあれば、コメントで共有してください。








All Articles