Quero executar tarefas de solicitação http paralela asyncio
, mas acho que python-requests
isso bloquearia o loop de eventos de asyncio
. Encontrei o aiohttp, mas ele não podia fornecer o serviço de solicitação http usando um proxy http.
Então, eu quero saber se há uma maneira de fazer solicitações http assíncronas com a ajuda de asyncio
.
python
python-requests
python-3.4
aiohttp
folheto
fonte
fonte
subprocess
para fazer um paralelo com seu código.Respostas:
Para usar solicitações (ou quaisquer outras bibliotecas de bloqueio) com assíncrono, você pode usar BaseEventLoop.run_in_executor para executar uma função em outro encadeamento e obter resultados para obter o resultado. Por exemplo:
Isso obterá as duas respostas em paralelo.
Com o python 3.5, você pode usar a nova
await
/async
sintaxe:Veja PEP0492 para mais.
fonte
o aiohttp já pode ser usado com o proxy HTTP:
fonte
As respostas acima ainda estão usando as antigas corotinas do estilo Python 3.4. Aqui está o que você escreveria se tivesse o Python 3.5+.
aiohttp
suporta proxy http agorafonte
Atualmente, os pedidos não suportam
asyncio
e não há planos para fornecer esse suporte. É provável que você possa implementar um "Adaptador de transporte" personalizado (como discutido aqui ) que saiba como usarasyncio
.Se eu me encontrar com algum tempo, é algo que eu realmente poderia investigar, mas não posso prometer nada.
fonte
Há um bom caso de loops e rosqueamento async / waitit em um artigo de Pimin Konstantin Kefaloukos Solicitações fáceis de HTTP paralelas com Python e asyncio :
fonte
for i in range(10000)
porque uma solicitação pode falhar ou atingir o tempo limite, certo?