Можно ли запустить синхронный requests неблокирующе в асинхронном приложении и как это сделать?

Синхронный requests можно выполнить в рабочем потоке, чтобы не занимать event loop. Сам запрос при этом остаётся блокирующим для этого потока.

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

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

Синхронный requests можно выполнить в рабочем потоке, чтобы не занимать event loop. Сам запрос при этом остаётся блокирующим для этого потока.

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

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

Синхронный requests можно выполнить в рабочем потоке, чтобы не занимать event loop. Сам запрос при этом остаётся блокирующим для этого потока.

response = await asyncio.to_thread(
    requests.get, 'https://example.com', timeout=(3, 10)
)

Здесь предполагаются импорты asyncio и requests. Нужны ограничение параллелизма и обработка ошибок. Отмена ожидания не прерывает поток; connect/read timeout requests не является общим дедлайном загрузки ответа. Для большого числа запросов удобнее асинхронный клиент с пулом соединений. Интерфейс requests.

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

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

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

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