Dejte každému proxy aiohttp vlastní rozpočet souběžnosti
Omezujte rozpracovanou práci na každém vybraném proxy a zachovejte limity fondu připojení aiohttp i čištění odpovědí.
Fond proxy může obsahovat koncové body s velmi odlišnou kapacitou. Povolení padesáti operací v aplikaci nezabrání tomu, aby jich čtyřicet devět zvolilo stejné proxy.
Pokud zásadou je „nejvýše čtyři rozpracované operace přes každé vybrané proxy“, vyjádřete tuto zásadu přímo. Udržujte semafor pro každou identitu proxy a získávejte jej kolem práce, která spotřebovává 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 předpokládá, že asyncio je importován a že adresy URL proxy jsou ověřeny. Pro veřejné požadavky na povolené veřejné proxy trase seznam HTTP proxy dodává kandidáty pro adresy URL proxy v aiohttp. Skutečná aplikace by měla také nastavit vlastní časový limit požadavku a rozhodnout, kolik dat odpovědi potřebuje. Čtení velkého souboru celého do paměti je samostatné rozhodnutí o zdrojích.
Povolení si ponechte pro drahou část
Uvolnění semaforu hned, jak dorazí hlavičky odpovědi, může zmařit zamýšlený limit. Streamované tělo může připojení používat ještě dlouho potom. Povolení si ponechte, dokud tělo není spotřebováno nebo odpověď není uzavřena podle pracovního postupu aplikace.
Vnořené správce kontextu činí čištění viditelným, když výjimka nebo zrušení opustí operaci. Vyhněte se ručnímu získávání a uvolňování pouze na konci úspěšné funkce.
Limity připojení odpovídají na jinou otázku
Limity konektoru aiohttp omezují připojení podle dokumentovaných pravidel konektoru. Zůstávají užitečné vedle semaforu aplikace. Limit připojení na cíl nevyjadřuje pouze svým názvem rozpočet sdílený všemi cíli přiřazenými jednomu proxy.
Rozlišujte také souběžnost od rychlosti požadavků. Čtyři dlouhé požadavky a čtyři velmi krátké požadavky používají stejný příděl souběžnosti, ale vytvářejí různé rychlosti požadavků za sekundu. Služba se zásadou rychlosti může vyžadovat tempo nebo samostatný omezovač rychlosti.
Zvolte stabilní, neutajný identifikátor proxy pro protokoly a metriky. Pokud dva URL s přihlašovacími údaji odkazují na stejný fond kapacity, rozhodněte, zda mají sdílet jeden rozpočet. Naopak různé porty nebo účty mohou představovat samostatné limity, když to operátor takto dokumentuje.
Když propustnost klesne, prozkoumejte, kde práce čeká: váš semafor, konektor, navazování spojení s proxy nebo čtení odpovědí. Zvýšení všech limitů najednou tuto rozlišení ztěžuje a může přesunout frontu do proxy, kterou nekontrolujete.