Es lebt! Kolben 2.0 freigegeben

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.








All Articles