Синхронный requests можно выполнить в рабочем потоке, чтобы не занимать event loop. Сам запрос при этом остаётся блокирующим для этого потока.
Можно ли запустить синхронный requests неблокирующе в асинхронном приложении и как это сделать?
Синхронный 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.