Dajte svakom aiohttp proxyju vlastiti proračun paralelnosti
Ograničite posao u tijeku po odabranom proxyju uz zadržavanje ograničenja aiohttp pool-a veza i čišćenja odgovora.
Pool proxyja može sadržavati krajnje točke vrlo različitih kapaciteta. Dopuštanje pedeset operacija u aplikaciji ne sprječava četrdeset devet od njih da odaberu isti proxy.
Ako je pravilo „najviše četiri operacije u tijeku kroz svaki odabrani proxy“, izrazite to pravilo izravno. Držite semafor za svaki identitet proxyja i steknite ga oko posla koji troši kapacitet proxyja.
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()Ova skica pretpostavlja da je asyncio uvezen i da su URL-ovi proxyja validirani. Za javne zahtjeve na dopuštenoj javnoj proxy ruti, popis HTTP proxyja daje kandidate za URL-ove proxyja u aiohttpu. Prava aplikacija treba također postaviti vlastiti timeout zahtjeva i odlučiti koliko joj podataka odgovora treba. Čitanje velike datoteke u cijelosti u memoriju zasebna je odluka o resursima.
Zadržite dozvolu za skupi dio
Oslobađanje semafora čim stignu zaglavlja odgovora može osujetiti predviđeno ograničenje. Streaming tijelo može nastaviti koristiti vezu još dugo. Zadržite dozvolu dok se tijelo ne potroši ili odgovor ne zatvori prema radnom toku aplikacije.
Ugniježđeni kontekstni upravitelji čine čišćenje vidljivim kada iznimka ili otkazivanje napuste operaciju. Izbjegavajte ručno stjecanje i oslobađanje samo na dnu uspješne funkcije.
Ograničenja veza odgovaraju na drugo pitanje
Ograničenja konektora aiohttpa ograničavaju veze prema dokumentiranim pravilima konektora. Ostaju korisna uz semafor aplikacije. Ograničenje veza po odredištu ne izražava, samo po svom imenu, proračun koji dijele sva odredišta dodijeljena jednom proxyju.
Također razlikujte paralelnost od stope zahtjeva. Četiri dugotrajna zahtjeva i četiri vrlo kratka zahtjeva koriste isti dodatak za paralelnost, ali proizvode različite stope zahtjeva u sekundi. Usluga s pravilom stope može zahtijevati tempo ili zaseban ograničivač stope.
Odaberite stabilan, ne-tajni identifikator proxyja za zapise i metrike. Ako dva URL-a s vjerodajnicama upućuju na isti pool kapaciteta, odlučite trebaju li dijeliti jedan proračun. Obrnuto, različiti portovi ili računi mogu predstavljati zasebna ograničenja kada ih operator tako dokumentira.
Kada propusnost padne, provjerite gdje posao čeka: vaš semafor, konektor, uspostavljanje proxy veze ili čitanja odgovora. Podizanje svih ograničenja odjednom otežava tu razliku i može premjestiti red u proxy koji ne kontrolirate.