誰もが知らないうちに、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.
これらの結果が得られた理由について何かアイデアがあれば、コメントで共有してください。