Gi hver aiohttp-proxy sitt eget samtidighetsbudsjett
Begrens pågående arbeid per valgt proxy mens aiohttps tilkoblingsbassenggrenser og opprydding av svar beholdes.
Et proxybasseng kan inneholde endepunkter med svært ulik kapasitet. Å tillate femti operasjoner i applikasjonen hindrer ikke førtini av dem i å velge samme proxy.
Hvis policyen er «høyst fire pågående operasjoner gjennom hver valgte proxy», uttrykk den policyen direkte. Hold en semafor for hver proxyidentitet, og erverv den rundt arbeidet som bruker proxyens kapasitet.
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()Denne skissen antar at asyncio er importert og at proxy-URL-ene er validert. For offentlige forespørsler på en tillatt offentlig proxy-rute leverer HTTP-proxylisten kandidater for aiohttps proxy-URL-er. En ekte applikasjon bør også sette sin egen forespørselstidsgrense og bestemme hvor mye svardata den trenger. Å lese en stor fil helt inn i minnet er en egen ressurssbeslutning.
Behold tillatelsen for den dyre delen
Å frigjøre semaforen så snart svarhodene ankommer kan ødelegge den tiltenkte grensen. En strømmende kropp kan fortsette å bruke tilkoblingen lenge etterpå. Behold tillatelsen til kroppen er forbrukt eller svaret er lukket i samsvar med applikasjonens arbeidsflyt.
De nestede kontekstbehandlerne gjør opprydding synlig når et unntak eller en avbrytelse forlater operasjonen. Unngå å erverve manuelt og frigjøre bare nederst i en vellykket funksjon.
Tilkoblingsgrenser besvarer et annet spørsmål
aiohttps connectorgrenser begrenser tilkoblinger etter connectorens dokumenterte regler. De forblir nyttige ved siden av en applikasjonssemafor. En tilkoblingsgrense per destinasjon uttrykker ikke, bare ved navnet, et budsjett som deles av alle destinasjoner som er tildelt én proxy.
Skill også samtidighet fra forespørselsrate. Fire langlivede forespørsler og fire svært korte forespørsler bruker samme samtidighetskvote mens de produserer ulike forespørsler-per-sekund-rater. En tjeneste med en ratepolicy kan trenge pacing eller en egen ratebegrenser.
Velg en stabil, ikke-hemmelig proxyidentifikator for logger og metrikker. Hvis to URL-er med legitimasjon refererer til samme kapasitetsbasseng, avgjør om de skal dele ett budsjett. Omvendt kan ulike porter eller kontoer representere separate grenser når operatøren dokumenterer dem slik.
Når gjennomstrømningen faller, undersøk hvor arbeidet venter: semaforen din, connectoren, oppsett av proxy-tilkoblingen eller lesing av svar. Å heve alle grensene samtidig gjør den forskjellen vanskeligere og kan flytte køen inn i en proxy du ikke kontrollerer.