@V-ampre

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

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

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

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

Похожие вопросы