Я хочу выполнять параллельные задачи HTTP-запроса asyncio
, но считаю, что python-requests
это заблокирует цикл обработки событий asyncio
. Я нашел aiohttp, но он не смог предоставить службу HTTP-запроса с использованием HTTP-прокси.
Поэтому я хочу знать, есть ли способ выполнять асинхронные HTTP-запросы с помощью asyncio
.
python
python-requests
python-3.4
aiohttp
листовка
источник
источник
subprocess
для параллельного выполнения кода.Ответы:
Чтобы использовать запросы (или любые другие библиотеки блокировки) с asyncio, вы можете использовать BaseEventLoop.run_in_executor для запуска функции в другом потоке и выхода из нее для получения результата. Например:
При этом оба ответа будут получены параллельно.
В python 3.5 вы можете использовать новый
await
/async
синтаксис:Подробнее см. PEP0492 .
источник
aiohttp уже можно использовать с HTTP-прокси:
источник
В приведенных выше ответах все еще используются старые сопрограммы в стиле Python 3.4. Вот что вы бы написали, если бы у вас был Python 3.5+.
aiohttp
теперь поддерживает http проксиисточник
В настоящее время запросы не поддерживаются,
asyncio
и мы не планируем предоставлять такую поддержку. Вероятно, вы могли бы реализовать собственный «Транспортный адаптер» (как обсуждается здесь ), который знает, как использоватьasyncio
.Если у меня будет какое-то время, я действительно могу это изучить, но я не могу ничего обещать.
источник
Хороший случай использования циклов async / await и потоковой передачи приведен в статье Пимина Константина Кефалукоса Простые параллельные HTTP-запросы с Python и asyncio :
источник
for i in range(10000)
потому что один запрос может завершиться ошибкой или тайм-аутом, верно?