Quiero hacer tareas paralelas de solicitud http asyncio
, pero encuentro que python-requests
bloquearía el bucle de eventos de asyncio
. Encontré aiohttp pero no podía proporcionar el servicio de solicitud http utilizando un proxy http.
Así que quiero saber si hay una manera de hacer solicitudes http asíncronas con la ayuda de asyncio
.
python
python-requests
python-3.4
aiohttp
volantes
fuente
fuente
subprocess
para poner en paralelo su código.Respuestas:
Para usar solicitudes (o cualquier otra biblioteca de bloqueo) con asyncio, puede usar BaseEventLoop.run_in_executor para ejecutar una función en otro hilo y obtener el resultado para obtener el resultado. Por ejemplo:
Esto obtendrá ambas respuestas en paralelo.
Con python 3.5 puede usar la nueva
await
/async
sintaxis:Ver PEP0492 para más.
fuente
aiohttp ya se puede usar con el proxy HTTP:
fuente
Las respuestas anteriores todavía usan las antiguas corutinas de estilo Python 3.4. Esto es lo que escribiría si tuviera Python 3.5+.
aiohttp
ahora es compatible con http proxyfuente
Actualmente, las solicitudes no son compatibles
asyncio
y no hay planes para proporcionar dicho soporte. Es probable que pueda implementar un "Adaptador de transporte" personalizado (como se describe aquí ) que sabe cómo usarasyncio
.Si me encuentro con algo de tiempo, es algo que realmente podría investigar, pero no puedo prometer nada.
fuente
Hay un buen caso de bucles asincrónicos / en espera y subprocesos en un artículo de Pimin Konstantin Kefaloukos Solicitudes HTTP sencillas en paralelo con Python y asyncio :
fuente
for i in range(10000)
porque una solicitud puede fallar o agotar el tiempo de espera, ¿verdad?