À l'insu de tous, le 12 mai 2021, une nouvelle version du célèbre microframework Flask est sortie. Bien qu'il semble que Flask ait déjà tout, eh bien, presque tout ce qui est nécessaire pour un microframework.
Anticipant l'intérêt, et ce qui est nouveau, je laisserai un lien vers le journal des modifications .
À partir des fonctionnalités de vente de la nouvelle version:
Suppression de la prise en charge de Python version 2. Minimum Python 3.6
Prise en charge des vues asynchrones et d'autres rappels tels que les gestionnaires d'erreurs définis avec async def. Les vues synchrones régulières continuent de fonctionner sans changement. Les fonctionnalités ASGI telles que les Websockets ne sont pas prises en charge.
Ajoutez des décorateurs de route pour les méthodes API HTTP courantes.
@ app.post ("/ login") == @ app.route ("/ login", methods = ["POST"])
Nouvelle fonction Config.from_file pour charger la configuration à partir de n'importe quel format de fichier.
La commande flask shell active la complétion des tabulations comme le fait un shell python classique.
Lors de la diffusion de fichiers statiques, les navigateurs mettront en cache en fonction du contenu plutôt qu'en fonction d'un minuteur de 12 heures. Cela signifie que les modifications apportées au contenu statique, comme les styles CSS, seront immédiatement reflétées lors du rechargement sans avoir à vider le cache.
Considérez l'asynchronie
Tout irait bien, mais au tout début après l'installation, le module asgiref n'a pas été trouvé. Nous l'installerons à la main.
Par exemple, écrivons l'application la plus simple: Ping / Pong. Il n'a pas beaucoup de sens et de logique complexe, il n'imite que quelques vérifications si le service est en vie. Aussi, cette application deviendra une référence.
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')
Déployer
Comme le dit le journal des modifications: «Les fonctions ASGI telles que les Websockets ne sont pas prises en charge».
Autrement dit, la seule façon de déployer une application consiste à utiliser 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.
Si vous avez des idées sur les raisons pour lesquelles ces résultats ont été obtenus, veuillez les partager dans les commentaires.