Ich möchte parallele http-Anforderungsaufgaben ausführen asyncio
, aber ich finde, dass python-requests
dies die Ereignisschleife von blockieren würde asyncio
. Ich habe aiohttp gefunden, aber es konnte den Dienst der http-Anfrage nicht über einen http-Proxy bereitstellen.
Ich möchte also wissen, ob es eine Möglichkeit gibt, asynchrone http-Anfragen mit Hilfe von zu erledigen asyncio
.
subprocess
Ihren Code parallel schalten.Antworten:
Um Anforderungen (oder andere blockierende Bibliotheken) mit asyncio zu verwenden, können Sie BaseEventLoop.run_in_executor verwenden , um eine Funktion in einem anderen Thread auszuführen und daraus zu ergeben, um das Ergebnis zu erhalten. Beispielsweise:
Dadurch werden beide Antworten parallel erhalten.
Mit Python 3.5 können Sie die neue
await
/async
Syntax verwenden:Weitere Informationen finden Sie unter PEP0492 .
quelle
aiohttp kann bereits mit HTTP-Proxy verwendet werden:
quelle
Die obigen Antworten verwenden immer noch die alten Coroutinen im Python 3.4-Stil. Folgendes würden Sie schreiben, wenn Sie Python 3.5+ hätten.
aiohttp
unterstützt jetzt http-Proxyquelle
Anfragen werden derzeit nicht unterstützt,
asyncio
und es gibt keine Pläne, solche Unterstützung bereitzustellen. Es ist wahrscheinlich, dass Sie einen benutzerdefinierten "Transportadapter" (wie hier beschrieben ) implementieren , der weiß, wie man ihn verwendetasyncio
.Wenn ich mich mit etwas Zeit befinde, ist es etwas, das ich vielleicht tatsächlich untersuche, aber ich kann nichts versprechen.
quelle
In einem Artikel von Pimin Konstantin Kefaloukos gibt es einen guten Fall von Async / Wait-Schleifen und Threading. Einfache parallele HTTP-Anforderungen mit Python und Asyncio :
quelle
for i in range(10000)
weil eine Anfrage fehlschlagen oder eine Zeitüberschreitung auftreten kann, oder?