Как происходит работа с библиотекой asyncpg?

Как будет работать данный код при запросе к БД с использованием asyncpg? Будет ли ожидание ответа? Я понимаю, что в конечном итоге мы всё равно будем ждать результата от сервиса, так как нам нужно будет его использовать. Мне не совсем понятно, в чем отличие от psycopg2 и будет ли выгода от использования asyncpg?
  • 6 декабря 2023 г. 14:52
Ответы на вопрос 2
Библиотека asyncpg предоставляет асинхронный интерфейс для работы с PostgreSQL в Python. Она позволяет выполнять запросы к базе данных и ожидать результаты без блокировки основного потока выполнения, что позволяет создавать асинхронные приложения с более высокой производительностью.

Ваш код будет работать следующим образом при использовании asyncpg:

1. Вызывается функция `create_pool`, которая устанавливает пул подключений к базе данных. Пул подключений предоставляет готовые к использованию соединения с базой данных и позволяет выполнять запросы асинхронно.
2. В контексте асинхронного блока `async with pool.acquire() as connection` получаем соединение из пула.
3. Далее создаётся объект `transaction`, который представляет транзакцию базы данных, и в контексте этой транзакции выполнение SQL-запроса происходит с помощью метода `fetchval`.
4. Возвращается результат запроса.

При выполнении этого кода ожидание ответа будет происходить на этапах получения соединения из пула и отправки запроса к базе данных. Использование асинхронной библиотеки позволяет освободить основной поток выполнения от блокировок, таким образом, он может продолжать выполнять другие операции или обработку других запросов в это время. 

Отличия asyncpg от psycopg2 заключаются в том, что asyncpg полностью асинхронна и предоставляет порядка 2-3 раза большую производительность благодаря использованию внутренних механизмов асинхронности PostgreSQL. Однако, в случаях, когда нет явной потребности в асинхронности и достаточна блокирующая работа с базой данных, psycopg2 также является надежным выбором.
Изучи основы asyncio, после этого у тебя должно появиться понимание как работает event loop, как в нем работают асинхронные и синхронные вызовы, как синхронный вызов на него влияет и т.п, и т.д.Поясню, мы ведь в итоге на ручке всё равно будем ждать результата от сервисано не будет блокировать event looppsycopg2будет блокировать event loop
Похожие вопросы