En proxy-pulje kan indeholde endepunkter med meget forskellig kapacitet. At tillade halvtreds operationer i applikationen forhindrer ikke niogfyrre af dem i at vælge den samme proxy.

Hvis politikken er »højst fire igangværende operationer gennem hver valgt proxy«, skal du udtrykke den politik direkte. Hold en semafor for hver proxy-identitet, og erhverv den omkring det arbejde, der forbruger proxyens kapacitet.

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 skitse forudsætter, at asyncio er importeret, og at proxy-URL'erne er valideret. Til offentlige anmodninger på en tilladt offentlig proxy-rute leverer HTTP-proxylisten kandidater til aiohttps proxy-URL'er. En rigtig applikation bør også sætte sin egen anmodningstimeout og beslutte, hvor mange svar-data den har brug for. At læse en stor fil helt ind i hukommelsen er en separat ressourcebeslutning.

Behold tilladelsen til den dyre del

At frigive semaforen, så snart svarhovederne ankommer, kan ødelægge den tilsigtede grænse. En streaming-body kan fortsætte med at bruge forbindelsen længe efter. Behold tilladelsen, indtil bodyen er forbrugt, eller svaret er lukket i overensstemmelse med applikationens arbejdsgang.

De indlejrede kontekstmanagere gør oprydning synlig, når en undtagelse eller annullering forlader operationen. Undgå at erhverve manuelt og frigive kun i bunden af en vellykket funktion.

Forbindelsesgrænser besvarer et andet spørgsmål

aiohttps connector-grænser begrænser forbindelser efter connectorens dokumenterede regler. De forbliver nyttige ved siden af en applikationssemafor. En forbindelsesgrænse pr. destination udtrykker ikke, alene ved sit navn, et budget, der deles af alle destinationer, der er tildelt én proxy.

Skel også mellem samtidighed og anmodningsrate. Fire langlivede anmodninger og fire meget korte anmodninger bruger samme samtidighedstildeling, mens de producerer forskellige anmodninger-per-sekund-rater. En tjeneste med en ratepolitik kan kræve pacing eller en separat ratebegrænser.

Vælg en stabil, ikke-hemmelig proxy-identifikator til logfiler og metrics. Hvis to URL'er med legitimationsoplysninger refererer til den samme kapacitetspulje, skal du beslutte, om de skal dele ét budget. Omvendt kan forskellige porte eller konti repræsentere separate grænser, når operatøren dokumenterer dem sådan.

Når gennemstrømningen falder, så undersøg, hvor arbejdet venter: din semafor, connectoren, proxy-forbindelsesopsætning eller svar-læsninger. At hæve alle grænser på én gang gør den sondring sværere og kan flytte køen over i en proxy, du ikke kontrollerer.

Relaterede artikler