Beri Setiap Proksi aiohttp Belanjawan Keserentakannya Sendiri
Hadkan kerja yang sedang berjalan bagi setiap proksi terpilih sambil mengekalkan had kumpulan sambungan aiohttp dan pembersihan respons.
Kumpulan proksi boleh mengandungi titik akhir dengan kapasiti yang sangat berbeza. Membenarkan lima puluh operasi dalam aplikasi tidak menghalang empat puluh sembilan daripadanya daripada memilih proksi yang sama.
Jika dasarnya ialah “paling banyak empat operasi sedang berjalan melalui setiap proksi terpilih”, nyatakan dasar itu secara langsung. Simpan semafor untuk setiap identiti proksi, dan perolehinya di sekeliling kerja yang menggunakan kapasiti proksi.
limits = {proxy: asyncio.Semaphore(4) for proxy in proxy_urls}
async def fetch(session, proxy, url):
async with limits[proxy]:
async with session.get(url, proxy=proxy) as response:
return await response.read()Lakaran ini menganggap asyncio telah diimport dan URL proksi telah disahkan. Untuk permintaan awam pada laluan proksi awam yang dibenarkan, senarai proksi HTTP membekalkan calon untuk URL proksi aiohttp. Aplikasi sebenar juga harus menetapkan tamat masa permintaannya sendiri dan memutuskan berapa banyak data respons yang diperlukan. Membaca fail besar sepenuhnya ke dalam memori ialah keputusan sumber yang berasingan.
Kekalkan permit untuk bahagian yang mahal
Melepaskan semafor sebaik sahaja pengepala respons tiba boleh menggagalkan had yang dimaksudkan. Badan penstriman mungkin terus menggunakan sambungan lama selepas itu. Kekalkan permit sehingga badan digunakan atau respons ditutup mengikut aliran kerja aplikasi.
Pengurus konteks bersarang menjadikan pembersihan kelihatan apabila pengecualian atau pembatalan meninggalkan operasi. Elakkan memperoleh secara manual dan melepaskan hanya di bahagian bawah fungsi yang berjaya.
Had sambungan menjawab soalan lain
Had penyambung aiohttp mengehadkan sambungan mengikut peraturan terdokumen penyambung. Ia kekal berguna bersama semafor aplikasi. Had sambungan setiap destinasi tidak menyatakan, hanya melalui namanya, belanjawan yang dikongsi oleh semua destinasi yang ditetapkan kepada satu proksi.
Bezakan juga keserentakan daripada kadar permintaan. Empat permintaan panjang hayat dan empat permintaan sangat pendek menggunakan elaun keserentakan yang sama sambil menghasilkan kadar permintaan sesaat yang berbeza. Perkhidmatan dengan dasar kadar mungkin memerlukan pengaturan tempo atau pengehad kadar berasingan.
Pilih pengecam proksi yang stabil dan bukan rahsia untuk log dan metrik. Jika dua URL yang membawa kelayakan merujuk kepada kumpulan kapasiti yang sama, putuskan sama ada ia patut berkongsi satu belanjawan. Sebaliknya, port atau akaun berbeza boleh mewakili had berasingan apabila pengendali mendokumenkannya sedemikian.
Apabila daya pemprosesan menurun, periksa di mana kerja menunggu: semafor anda, penyambung, persediaan sambungan proksi, atau pembacaan respons. Menaikkan semua had serentak menjadikan perbezaan itu lebih sukar dan boleh memindahkan baris gilir ke proksi yang anda tidak kawal.