Оно живое! Вышла версия Flask 2.0

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Незаметно от всех 12 мая 2021 вышла новая версия известного микрофреймворка Flask. Хотя казалось, что во Flask есть уже все, ну или почти все, что нужно для микрофреймворка.
Предвкушая интерес, а что же нового завезли, оставлю ссылку на Change log.

Из приглянувшихся особенностей новой версии:

  • Прекращена поддержка Python версии 2. Минимальная версия Python 3.6

  • Поддержка асинхронных view и других обратных вызовов, таких как обработчики ошибок, определенные с помощью async def. Обычные синхронные view продолжают работать без изменений. Функции ASGI, такие как веб-сокеты, не поддерживаются.

  • Добавьте декораторы роутов для общих методов HTTP API.
    @app.post ("/ login") == @ app.route ("/ login", methods = ["POST"])

  • Новая функция Config.from_file для загрузки конфигурации из файла любого формата.

  • Команда flask shell включает завершение табуляции, как это делает обычная оболочка 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')

Деплой

Как было сказано в Change log: "Функции 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.

Если у вас есть идеи, почему получились именно такие результаты - пожалуйста поделитесь ими в комментариях.

Источник: https://habr.com/ru/post/557250/


Интересные статьи

Интересные статьи

Двадцать четвертый выпуск - мы говорим о профессии Трафик-менеджер в игровой индустрии. Что это за профессия, насколько она востребована? Чем занимается Трафик-менеджер? ...
Добрый день. Я решил начать публиковать мою книгу про исследование Венеры в веб формате. Это первая часть из опубликованного (первая глава). Если все будет хорошо, то попробую выложит...
Замена старых технологий на новые довольно редко проходит без проблем и забот. Чаще всего возникают инциденты. Сейчас, когда Adobe блокирует Flash по всему миру, у многих компаний и гос...
VUE.JS - это javascript фрэймворк, с версии 18.5 его добавили в ядро битрикса, поэтому можно его использовать из коробки.
Бизнес-смыслы появились в Битриксе в начале 2016 года, но мало кто понимает, как их правильно использовать для удобной настройки интернет-магазинов.