Pool proxyja može sadržavati krajnje tačke vrlo različitih kapaciteta. Dopuštanje pedeset operacija u aplikaciji ne sprječava četrdeset devet od njih da izaberu isti proxy.

Ako je politika „najviše četiri operacije u toku kroz svaki odabrani proxy“, izrazite tu politiku 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, lista 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 velikog fajla u potpunosti u memoriju je odvojena 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 menadžeri čine čišćenje vidljivim kada izuzetak 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, budžet 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 politikom stope može zahtijevati tempo ili odvojeni ograničivač stope.

Odaberite stabilan, ne-tajni identifikator proxyja za logove i metrike. Ako dva URL-a s vjerodajnicama upućuju na isti pool kapaciteta, odlučite trebaju li dijeliti jedan budžet. Obrnuto, različiti portovi ili računi mogu predstavljati odvojena 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.

Povezani članci