Comments 11
Очевидно что синхронный сервер будет быстрее т.к. в Вашем пинг/понг примере не происходит на самом деле никакой асинхронной работы. В данном случае асинхронный евент луп просто создает лишний оверхед т.к. нет никакого ввода/вывода. Если Вы хотите сравнить производительность то стоит добавить хотя бы одно асинхронное действие (например хттп запрос на внешний сервис)
В посте упущено очень важное замечание:
When a request comes in to an async view, Flask will start an event loop in a thread, run the view function there, then return the result.
Each request still ties up one worker, even for async views.
Flask запускает асинхронную вьюху в event loop в отдельном потоке (используя asgiref.async_to_sync) и синхронно ждёт, пока закончится выполнение этой асинхронной вьюхи, тем самым блокируя основной рабочий поток.
То есть входящие запросы обрабатываются всё так же синхронно, так что в большинстве задач улучшения производительности не будет. Зато будут накладные расходы на запуск event loop в отдельном потоке, что в посте и измерено.
Странное решение. Ведь запустить евент-луп для выполнения одной корутины — это одна строчка кода:
asyncio.run(my_coroutine())
Т.е. нет особых проблем при необходимости выполнить корутину из обычной синхронной вьюшки.
И не понятно зачем нужно делать это в отдельном треде, если основной всё равно будет блокироваться и ждать завершения его работы.
Насколько я понял, есть много нюансов и пограничных случаев, в которых такой наивный подход может сломаться. Я не разобрался в деталях, но в документации asgiref упоминается, что запуск в отдельном потоке это необходимость
>> оставлю ссылку на Change log
Page Not Found
Не вижу смысла в обновлении, перформанс хуже профита мало, асинхронка больше для пыли в глаза. А так фласк хорош.
Непонятно что автор тестирует. Потери на асинхронный цикл при синхронном режиме работы?
Добавьте хотя бы sleep в 20 мс. для эмуляции запроса к БД (time.sleep(0.02) и asyncio.sleep(0.02)).
Скорее здесь асинхронность как промежуточный патч. Чтобы разработчики адаптировались. Так как когда я тестировал многие библиотеки не работали flask-login и.т.д. Интересно будет когда доработают сравнить с fastapi. А то очень часто их противопоставляли.
Оно живое! Вышла версия Flask 2.0