En proxypool kan innehålla slutpunkter med mycket olika kapacitet. Att tillåta femtio operationer i applikationen hindrar inte fyrtionio av dem från att välja samma proxy.

Om policyn är ”högst fyra pågående operationer genom varje vald proxy”, uttryck den policyn direkt. Håll en semafor för varje proxyidentitet och förvärva den runt arbetet som förbrukar proxyns 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()

Denna skiss antar att asyncio har importerats och att proxy-URL:erna har validerats. För offentliga förfrågningar på en tillåten offentlig proxy-rutt tillhandahåller HTTP-proxylistan kandidater för aiohttps proxy-URL:er. En riktig applikation bör också ställa in sin egen förfrågningstidsgräns och bestämma hur mycket svarsdata den behöver. Att läsa en stor fil helt i minnet är ett separat resursbeslut.

Behåll tillståndet för den dyra delen

Att frigöra semaforen så snart svarshuvudena anländer kan omintetgöra den avsedda gränsen. En strömmande kropp kan fortsätta använda anslutningen långt senare. Behåll tillståndet tills kroppen har förbrukats eller svaret har stängts enligt applikationens arbetsflöde.

De kapslade kontexthanterarna gör städningen synlig när ett undantag eller en avbrytning lämnar operationen. Undvik att förvärva manuellt och frigöra bara längst ned i en lyckad funktion.

Anslutningsgränser besvarar en annan fråga

aiohttps connectorgränser begränsar anslutningar enligt connectorns dokumenterade regler. De förblir användbara vid sidan av en applikationssemafor. En anslutningsgräns per destination uttrycker inte, bara genom sitt namn, en budget som delas av alla destinationer som tilldelats en proxy.

Skilj också på samtidighet och förfrågningsfrekvens. Fyra långlivade förfrågningar och fyra mycket korta förfrågningar använder samma samtidighetskvot men ger olika förfrågningar-per-sekund-frekvenser. En tjänst med en frekvenspolicy kan kräva pacing eller en separat frekvensbegränsare.

Välj en stabil, icke-hemlig proxyidentifierare för loggar och mätvärden. Om två URL:er med autentiseringsuppgifter refererar till samma kapacitetspool, avgör om de ska dela en budget. Omvänt kan olika portar eller konton representera separata gränser när operatören dokumenterar dem så.

När genomströmningen sjunker, undersök var arbetet väntar: din semafor, connectorn, upprättandet av proxyanslutningen eller läsningen av svar. Att höja alla gränser på en gång gör den distinktionen svårare och kan flytta kön till en proxy du inte kontrollerar.

Relaterade artiklar