@V-ampre

Обязательно ли использовать асинхронные функции с asyncio?

Разбираюсь с asyncio и aiohttp и заметил что везде используются асинхронные обертки, например aiohttp_jinja2, aiopg.sa и т.п. Вопрос, можно ли в aiohttp использовать обычные синхронные варианты, например той же алхимии? Или если я захочу написать например сериализаторы для моделей, например как в django-rest-framework, обязательно ли делать их тоже асинхронными? Вообщем насколько уместен обычный синхронный код в проектах с asyncio и aiohttp?
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 3
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вся эта асинхронщина нужна для одной единственной цели - не ждать, пока другие процессы работают.
Если вы можете обойтись без асинхронного кода и вам не мешают блокировки на время доступа к БД, то зачем вам вообще asyncio и aiohttp? Используйте тогда flask и запускайте gunicorn'ом много одинаковых процессов с вашим приложением и работайте в них синхронно.

Если вы в асинхронном коде сделаете блокирующий вызов к БД и будете ждать пока она ответит, то вы в этом месте убиваете всё полезное, что даёт вам асинхронщина, но оставляете все неудобства, ведь асинхронный код сложнее синхронного, его труднее писать, труднее отлаживать, труднее тестировать, труднее читать.
Ответ написан
@bacon
Вызов синхронного кода блокирует event loop и если такие вызовы будут "тяжелые" по CPU Bound, то ваш асинхронный код превратиться в обычный синхронный однопоточный код, ну и плюс небольшой оверхед который будет добавлен asyncio
ЗЫ синхронный код без блокировки можно запустить в run_in_executor, но есть нюансы.
Ответ написан
@tumbler
бекенд-разработчик на python
Я использовал синхронный Django-ORM в связке с aiohttp-клиентом в задаче синхронизации JIRA + Redmine. Идея в том, что постгрес находится на том же сервере, а вот API JIRA и Redmine мало того что далеко, так еще и отвечают очень долго. В итоге, оверхед на синхронную работу с БД есть, но скорость разработки и понятность транзакционной модели в таком коде перекрывают его с лихвой.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы