Een proxypool kan eindpunten met zeer verschillende capaciteit bevatten. Vijftig bewerkingen in de hele applicatie toestaan, weerhoudt negenenveertig ervan er niet van dezelfde proxy te kiezen.

Als het beleid is ‘hoogstens vier bewerkingen in uitvoering via elke geselecteerde proxy’, druk dat beleid dan direct uit. Houd een semafoor per proxy-identiteit en verkrijg die rond het werk dat de capaciteit van de proxy verbruikt.

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()

Deze schets veronderstelt dat asyncio is geïmporteerd en dat de proxy-URL's zijn gevalideerd. Voor openbare verzoeken op een toegestane openbare proxyroute levert de HTTP-proxylijst kandidaten voor de proxy-URL's van aiohttp. Een echte applicatie moet ook een eigen verzoek-time-out instellen en beslissen hoeveel reactiedata nodig is. Een groot bestand volledig in het geheugen lezen is een aparte resourcebeslissing.

Houd de vergunning voor het dure deel

De semafoor vrijgeven zodra de reactiekoppen aankomen kan de beoogde limiet tenietdoen. Een streamende body kan de verbinding daarna nog lang gebruiken. Houd de vergunning tot de body is verbruikt of de reactie is gesloten volgens de werkstroom van de applicatie.

De geneste contextmanagers maken opruimen zichtbaar wanneer een uitzondering of annulering de bewerking verlaat. Vermijd handmatig verkrijgen en alleen vrijgeven onderaan een geslaagde functie.

Verbindingslimieten beantwoorden een andere vraag

De connectorlimieten van aiohttp begrenzen verbindingen volgens de gedocumenteerde regels van de connector. Ze blijven nuttig naast een applicatiesemafoor. Een verbindingslimiet per bestemming drukt niet, alleen door zijn naam, een budget uit dat alle aan één proxy toegewezen bestemmingen delen.

Onderscheid ook gelijktijdigheid van verzoekfrequentie. Vier langlevende verzoeken en vier zeer korte verzoeken gebruiken dezelfde gelijktijdigheidstoewijzing terwijl ze verschillende verzoeken-per-seconde-frequenties opleveren. Een dienst met een frequentiebeleid kan pacing of een aparte frequentiebegrenzer nodig hebben.

Kies een stabiele, niet-geheime proxy-identificatie voor logboeken en statistieken. Als twee URL's met inloggegevens naar dezelfde capaciteitspool verwijzen, beslis of ze één budget moeten delen. Omgekeerd kunnen verschillende poorten of accounts afzonderlijke limieten vertegenwoordigen wanneer de operator ze zo documenteert.

Wanneer de doorvoer daalt, onderzoek waar werk wacht: je semafoor, de connector, het opzetten van de proxyverbinding of het lezen van reacties. Alle limieten tegelijk verhogen maakt dat onderscheid moeilijker en kan de wachtrij naar een proxy verplaatsen die je niet beheert.

Gerelateerde artikelen