Prokura baseno povas enhavi finpunktojn kun tre malsamaj kapabloj. Permesi kvindek operaciojn en la aplikaĵo ne malhelpas ke kvardek naŭ el ili elektu la saman prokuron.

Se la politiko estas „plej multe kvar prilaborataj operacioj tra ĉiu elektita prokuro“, esprimu tiun politikon rekte. Tenu semaforon por ĉiu prokura identeco kaj akiru ĝin ĉirkaŭ la laboro, kiu konsumas la kapablon de la prokuro.

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

Ĉi tiu skizo supozas, ke asyncio estas importita kaj ke la prokuraj URL-oj estis validigitaj. Por publikaj petoj sur permesita publika prokura vojo, la listo de HTTP-prokuroj liveras kandidatojn por la prokuraj URL-oj de aiohttp. Reala aplikaĵo ankaŭ devus agordi sian propran petan tempolimon kaj decidi kiom da respondaj datumoj ĝi bezonas. Legi grandan dosieron tute en la memoron estas aparta decido pri rimedoj.

Tenu la permeson por la multekosta parto

Liberigi la semaforon tuj kiam alvenas la respondaj kapoj povas vanigi la celatan limon. Elfluanta korpo povas daŭre uzi la konekton longe poste. Tenu la permeson ĝis la korpo estos konsumita aŭ la respondo estos fermita laŭ la laborfluo de la aplikaĵo.

La nestitaj kuntekst-administrantoj igas la purigadon videbla kiam escepto aŭ nuliĝo forlasas la operacion. Evitu permane akiri kaj liberigi nur ĉe la fino de sukcesa funkcio.

Konektaj limoj respondas al alia demando

La limoj de la konektilo de aiohttp limigas konektojn laŭ la dokumentitaj reguloj de la konektilo. Ili restas utilaj apud aplikaĵa semaforo. Konekta limo por celloko ne esprimas, nur per sia nomo, buĝeton dividatan de ĉiuj cellokoj asignitaj al unu prokuro.

Ankaŭ distingi samtempecon de peta indico. Kvar longdaŭraj petoj kaj kvar tre mallongaj petoj uzas la saman samtempec-kvoton dum ili produktas malsamajn petojn-po-sekundo-indicojn. Servo kun indicpolitiko povas postuli paŝadon aŭ apartan indiclimigilon.

Elektu stabilan, ne-sekretan prokuran identigilon por protokoloj kaj metrikoj. Se du URL-oj kun legitimiloj rilatas al la sama kapabla baseno, decidu ĉu ili dividu unu buĝeton. Male, malsamaj pordoj aŭ kontoj povas reprezenti apartajn limojn kiam la operatoro dokumentas ilin tiel.

Kiam trairo malpliiĝas, esploru kie laboro atendas: via semaforo, la konektilo, starigo de prokura konekto aŭ legado de respondoj. Levi ĉiujn limojn samtempe malfaciligas tiun distingon kaj povas movi la atendovicon en prokuron, kiun vi ne kontrolas.

Rilataj artikoloj