Chcę wykonywać równoległe zadania żądań http w programie asyncio
, ale uważam, python-requests
że zablokowałoby to pętlę zdarzeń asyncio
. Znalazłem aiohttp, ale nie mógł on obsłużyć żądania HTTP przez proxy http.
Dlatego chcę wiedzieć, czy istnieje sposób na wykonywanie asynchronicznych żądań http za pomocą asyncio
.
python
python-requests
python-3.4
aiohttp
ulotka
źródło
źródło
subprocess
równoległego kodu.Odpowiedzi:
Aby użyć żądań (lub innych bibliotek blokujących) z asyncio, możesz użyć BaseEventLoop.run_in_executor do uruchomienia funkcji w innym wątku i uzyskania wyniku z niej. Na przykład:
Spowoduje to równoległe uzyskanie obu odpowiedzi.
W Pythonie 3.5 możesz użyć nowej
await
/async
składni:Zobacz PEP0492 po więcej.
źródło
aiohttp może być już używany z proxy HTTP:
źródło
Powyższe odpowiedzi nadal wykorzystują stare procedury w stylu Pythona 3.4. Oto, co byś napisał, gdybyś miał Pythona 3.5+.
aiohttp
obsługuje teraz proxy httpźródło
Żądania obecnie nie są obsługiwane
asyncio
i nie ma planów zapewnienia takiego wsparcia. Prawdopodobnie można zaimplementować niestandardowy „adapter transportowy” (omawiany tutaj ), który wie, jak go używaćasyncio
.Jeśli znajdę się przez jakiś czas, to może rzeczywiście zajrzę, ale nie mogę nic obiecać.
źródło
Istnieje dobry przypadek pętli async / await i wątków w artykule Pimin Konstantin Kefaloukos Easy równoległe żądania HTTP z Pythonem i asyncio :
źródło
for i in range(10000)
ponieważ jedno żądanie może się nie powieść lub przekroczyć limit czasu, prawda?