Saya ingin melakukan tugas permintaan http paralel asyncio
, tetapi saya menemukan bahwa itu python-requests
akan memblokir loop peristiwa asyncio
. Saya telah menemukan aiohttp tetapi tidak dapat menyediakan layanan permintaan http menggunakan proxy http.
Jadi saya ingin tahu apakah ada cara untuk melakukan permintaan http asinkron dengan bantuan asyncio
.
python
python-requests
python-3.4
aiohttp
pamflet
sumber
sumber
subprocess
kode Anda secara paralel.Jawaban:
Untuk menggunakan permintaan (atau pustaka pemblokiran lainnya) dengan asyncio, Anda bisa menggunakan BaseEventLoop.run_in_executor untuk menjalankan fungsi di utas lain dan menghasilkan darinya untuk mendapatkan hasilnya. Sebagai contoh:
Ini akan mendapatkan kedua respons secara paralel.
Dengan python 3.5 Anda dapat menggunakan
await
/async
sintaks baru:Lihat PEP0492 untuk lebih lanjut.
sumber
aiohttp sudah bisa digunakan dengan proxy HTTP:
sumber
Jawaban di atas masih menggunakan coroutine style Python 3.4 lama. Inilah yang akan Anda tulis jika Anda mendapat Python 3.5+.
aiohttp
mendukung proksi http sekarangsumber
Permintaan saat ini tidak mendukung
asyncio
dan tidak ada rencana untuk memberikan dukungan tersebut. Kemungkinan Anda dapat menerapkan "Transport Adapter" khusus (seperti yang dibahas di sini ) yang tahu cara menggunakannyaasyncio
.Jika saya menemukan diri saya dengan beberapa waktu itu adalah sesuatu yang saya mungkin benar-benar melihat ke dalam, tetapi saya tidak bisa menjanjikan apa pun.
sumber
Ada beberapa kasus async / menunggu loop dan threading dalam artikel oleh Pimin Konstantin Kefaloukos Permintaan HTTP paralel yang mudah dengan Python dan asyncio :
sumber
for i in range(10000)
karena satu permintaan mungkin gagal atau kehabisan waktu, bukan?