Почему aiohttp может выполнять HTTP-запросы неблокирующе, а requests — нет?

aiohttp интегрирован с event loop и отдаёт управление на ожидании сетевого I/O. requests предоставляет синхронный интерфейс и удерживает вызывающий поток до завершения операции.

Короткий ответ

Что ответить на собеседовании

aiohttp интегрирован с event loop и отдаёт управление на ожидании сетевого I/O. requests предоставляет синхронный интерфейс и удерживает вызывающий поток до завершения операции.

Подробный разбор

Ответ с пояснениями

aiohttp интегрирован с event loop и отдаёт управление на ожидании сетевого I/O. requests предоставляет синхронный интерфейс и удерживает вызывающий поток до завершения операции.

Поэтому прямой requests.get внутри корутины мешает другим задачам того же цикла событий. Для асинхронного приложения выбирают асинхронный HTTP-клиент либо выносят синхронный вызов в отдельный поток с собственными таймаутами. async перед определением функции не меняет природу вложенного блокирующего вызова. О блокирующем интерфейсе requests.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку