Je veux faire des tâches de requête http parallèles dans asyncio
, mais je trouve que python-requests
cela bloquerait la boucle d'événements de asyncio
. J'ai trouvé aiohttp mais il n'a pas pu fournir le service de requête http en utilisant un proxy http.
Je veux donc savoir s'il existe un moyen de faire des requêtes http asynchrones à l'aide de asyncio
.
python
python-requests
python-3.4
aiohttp
prospectus
la source
la source
subprocess
pour mettre en parallèle votre code.Réponses:
Pour utiliser des requêtes (ou toute autre bibliothèque de blocage) avec asyncio, vous pouvez utiliser BaseEventLoop.run_in_executor pour exécuter une fonction dans un autre thread et en tirer le résultat pour obtenir le résultat. Par exemple:
Cela obtiendra les deux réponses en parallèle.
Avec python 3.5, vous pouvez utiliser la nouvelle syntaxe
await
/async
:Voir PEP0492 pour plus.
la source
aiohttp peut déjà être utilisé avec le proxy HTTP:
la source
Les réponses ci-dessus utilisent toujours les anciennes coroutines de style Python 3.4. Voici ce que vous écririez si vous aviez Python 3.5+.
aiohttp
prend en charge le proxy http maintenantla source
Requests ne prend pas en charge actuellement
asyncio
et il n'est pas prévu de fournir un tel support. Il est probable que vous puissiez implémenter un «adaptateur de transport» personnalisé (comme indiqué ici ) qui sait comment l'utiliserasyncio
.Si je me retrouve avec un peu de temps, c'est quelque chose que je pourrais en fait examiner, mais je ne peux rien promettre.
la source
Il y a un bon cas de boucles async / d'attente et de threading dans un article de Pimin Konstantin Kefaloukos Requêtes HTTP parallèles faciles avec Python et asyncio :
la source
for i in range(10000)
parce qu'une demande peut échouer ou expirer, non?