aiohttp интегрирован с event loop и отдаёт управление на ожидании сетевого I/O. requests предоставляет синхронный интерфейс и удерживает вызывающий поток до завершения операции.
Почему aiohttp может выполнять HTTP-запросы неблокирующе, а requests — нет?
aiohttp интегрирован с event loop и отдаёт управление на ожидании сетевого I/O. requests предоставляет синхронный интерфейс и удерживает вызывающий поток до завершения операции.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
aiohttp интегрирован с event loop и отдаёт управление на ожидании сетевого I/O. requests предоставляет синхронный интерфейс и удерживает вызывающий поток до завершения операции.
Поэтому прямой requests.get внутри корутины мешает другим задачам того же цикла событий. Для асинхронного приложения выбирают асинхронный HTTP-клиент либо выносят синхронный вызов в отдельный поток с собственными таймаутами. async перед определением функции не меняет природу вложенного блокирующего вызова. О блокирующем интерфейсе requests.