Unbekannt wurde am 12. Mai 2021 eine neue Version des berühmten Flask-Mikroframeworks veröffentlicht. Obwohl es so aussah, als ob Flask bereits alles hat, fast alles, was für ein Mikroframework benötigt wird.
Wenn ich Interesse antizipiere und was neu ist, werde ich einen Link zum Änderungsprotokoll hinterlassen .
Aus den Verkaufsfunktionen der neuen Version:
Unterstützung für Python Version 2 eingestellt. Minimum Python 3.6
Unterstützung für asynchrone Ansichten und andere Rückrufe, z. B. Fehlerbehandlungsroutinen, die mit async def definiert wurden. Regelmäßige synchrone Ansichten funktionieren weiterhin unverändert. ASGI-Funktionen wie Websockets werden nicht unterstützt.
Fügen Sie Routendekoratoren für gängige HTTP-API-Methoden hinzu.
@ app.post ("/ login") == @ app.route ("/ login", Methods = ["POST"])
Neue Funktion Config.from_file zum Laden der Konfiguration aus einem beliebigen Dateiformat.
Der Befehl flask shell aktiviert die Tab-Vervollständigung wie eine normale Python-Shell.
Bei der Bereitstellung statischer Dateien werden Browser basierend auf Inhalten und nicht basierend auf einem 12-Stunden-Timer zwischengespeichert. Dies bedeutet, dass Änderungen an statischen Inhalten wie CSS-Stilen beim erneuten Laden sofort übernommen werden, ohne dass der Cache geleert werden muss.
Betrachten Sie Asynchronität
Alles wäre in Ordnung, aber gleich zu Beginn nach der Installation wurde das asgiref-Modul nicht gefunden. Wir werden es von Hand installieren.
Schreiben wir zum Beispiel die einfachste Anwendung: Ping / Pong. Es hat nicht viel Sinn und komplexe Logik, es ahmt nur eine Überprüfung nach, ob der Dienst aktiv ist. Auch diese Anwendung wird zum Benchmark.
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')
Bereitstellen
Im Änderungsprotokoll heißt es: "ASGI-Funktionen wie Websockets werden nicht unterstützt."
Das heißt, die einzige Möglichkeit, eine Anwendung bereitzustellen, ist die Verwendung von 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.
Wenn Sie Ideen haben, warum diese Ergebnisse erzielt wurden, teilen Sie sie bitte in den Kommentaren mit.