Suteikite kiekvienam aiohttp proxy savo lygiagretumo biudžetą
Apribokite vykdomą darbą kiekvienam pasirinktam proxy, išlaikydami aiohttp jungčių telkinio ribas ir atsakymų valymą.
Proxy telkinys gali turėti labai skirtingo pajėgumo galinių taškų. Leidus penkiasdešimt operacijų visoje programoje, keturiasdešimt devynios iš jų vis tiek gali pasirinkti tą patį proxy.
Jei politika yra „daugiausia keturios vykdomos operacijos per kiekvieną pasirinktą proxy“, išreikškite ją tiesiogiai. Laikykite semaforą kiekvienam proxy identitetui ir įsigykite jį aplink darbą, kuris naudoja proxy pajėgumą.
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()Šiame eskize daroma prielaida, kad asyncio jau importuotas, o proxy URL adresai patikrinti. Viešiems užklausimams leistiname viešame proxy maršrute HTTP proxy sąrašas pateikia kandidatus aiohttp proxy URL adresams. Tikra programa taip pat turėtų nustatyti savo užklausos laiko limitą ir nuspręsti, kiek atsakymo duomenų jai reikia. Didelio failo nuskaitymas visiškai į atmintį yra atskiras išteklių sprendimas.
Išlaikykite leidimą brangiai daliai
Semaforo atlaisvinimas vos atėjus atsakymo antraštėms gali sužlugdyti numatytą ribą. Srautinis turinys gali toliau naudoti jungtį dar ilgai. Išlaikykite leidimą, kol turinys bus suvartotas arba atsakymas bus uždarytas pagal programos darbo eigą.
Įdėtieji konteksto tvarkyklės padaro valymą matomą, kai išimtis ar atšaukimas palieka operaciją. Venkite rankinio įsigijimo ir atlaisvinimo tik sėkmingos funkcijos pabaigoje.
Jungčių ribos atsako į kitą klausimą
aiohttp jungties ribos apriboja jungtis pagal dokumentuotas jungties taisykles. Jos lieka naudingos kartu su programos semaforu. Jungčių riba vienam tikslui vien savo pavadinimu neišreiškia biudžeto, kurį dalijasi visi vienam proxy priskirti tikslai.
Taip pat skirkite lygiagretumą nuo užklausų dažnio. Keturios ilgalaikės užklausos ir keturios labai trumpos užklausos naudoja tą pačią lygiagretumo kvotą, bet sukuria skirtingą užklausų per sekundę dažnį. Paslaugai su dažnio politika gali prireikti tempo reguliavimo ar atskiro dažnio ribotuvo.
Pasirinkite stabilų, ne slaptą proxy identifikatorių žurnalams ir metrikoms. Jei du URL su prisijungimo duomenimis nurodo tą patį pajėgumo telkinį, nuspręskite, ar jie turėtų dalytis vienu biudžetu. Priešingai, skirtingi prievadai ar paskyros gali reikšti atskiras ribas, kai operatorius tai dokumentuoja.
Kai pralaidumas krinta, patikrinkite, kur laukia darbas: jūsų semaforas, jungtis, proxy ryšio nustatymas ar atsakymų skaitymas. Visų ribų pakėlimas vienu metu apsunkina tą skirtumą ir gali perkelti eilę į proxy, kurio nekontroliuojate.