Dajte každému proxy aiohttp vlastný rozpočet súbežnosti
Obmedzte rozpracovanú prácu na každom vybranom proxy a zachovajte limity fondu pripojení aiohttp aj čistenie odpovedí.
Fond proxy môže obsahovať koncové body s veľmi odlišnou kapacitou. Povolenie päťdesiatich operácií v aplikácii nezabráni tomu, aby štyridsaťdeväť z nich zvolilo rovnaké proxy.
Ak zásadou je „najviac štyri rozpracované operácie cez každé vybrané proxy“, vyjadrite túto zásadu priamo. Udržujte semafor pre každú identitu proxy a získavajte ho okolo práce, ktorá spotrebúva kapacitu proxy.
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()Tento náčrt predpokladá, že asyncio je importovaný a že URL adresy proxy sú overené. Pre verejné požiadavky na povolenej verejnej proxy trase zoznam HTTP proxy dodáva kandidátov pre URL adresy proxy v aiohttp. Skutočná aplikácia by mala tiež nastaviť vlastný časový limit požiadavky a rozhodnúť, koľko dát odpovede potrebuje. Čítanie veľkého súboru celého do pamäte je samostatné rozhodnutie o zdrojoch.
Ponechajte povolenie pre drahú časť
Uvoľnenie semaforu hneď po príchode hlavičiek odpovede môže zmariť zamýšľaný limit. Streamované telo môže pripojenie používať ešte dlho potom. Ponechajte povolenie, kým telo nie je spotrebované alebo odpoveď nie je uzavretá podľa pracovného postupu aplikácie.
Vnorené správcovia kontextu robia čistenie viditeľným, keď výnimka alebo zrušenie opustí operáciu. Vyhnite sa ručnému získavaniu a uvoľňovaniu len na konci úspešnej funkcie.
Limity pripojení odpovedajú na inú otázku
Limity konektora aiohttp obmedzujú pripojenia podľa dokumentovaných pravidiel konektora. Zostávajú užitočné vedľa semaforu aplikácie. Limit pripojení na cieľ nevyjadruje iba svojím názvom rozpočet zdieľaný všetkými cieľmi priradenými jednému proxy.
Rozlišujte aj súbežnosť od rýchlosti požiadaviek. Štyri dlhotrvajúce požiadavky a štyri veľmi krátke požiadavky používajú rovnakú kvótu súbežnosti, ale vytvárajú rôzne rýchlosti požiadaviek za sekundu. Služba so zásadou rýchlosti môže vyžadovať tempo alebo samostatný obmedzovač rýchlosti.
Zvoľte stabilný, neutajný identifikátor proxy pre protokoly a metriky. Ak dva URL s prihlasovacími údajmi odkazujú na ten istý fond kapacity, rozhodnite, či majú zdieľať jeden rozpočet. Naopak, rôzne porty alebo účty môžu predstavovať samostatné limity, keď to operátor takto dokumentuje.
Keď priepustnosť klesne, preskúmajte, kde práca čaká: váš semafor, konektor, nadväzovanie spojenia s proxy alebo čítanie odpovedí. Zvýšenie všetkých limitov naraz toto rozlíšenie sťažuje a môže presunúť front do proxy, ktoré nekontrolujete.