Un pool de proxys pot contenir punts finals amb capacitats molt diferents. Permetre cinquanta operacions a tota l'aplicació no impedeix que quaranta-nou d'elles triïn el mateix proxy.

Si la política és «com a màxim quatre operacions en curs per cada proxy seleccionat», expressa aquesta política directament. Mantingues un semàfor per cada identitat de proxy i adquireix-lo al voltant del treball que consumeix la capacitat del proxy.

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

Aquest esbós assumeix que asyncio s'ha importat i que les URL dels proxys s'han validat. Per a peticions públiques en una ruta de proxy públic permesa, la llista de proxys HTTP proporciona candidats per a les URL de proxy d'aiohttp. Una aplicació real també hauria d'establir el seu propi temps d'espera de petició i decidir quina quantitat de dades de resposta necessita. Llegir un fitxer gran completament a la memòria és una decisió de recursos a part.

Conserva el permís per a la part costosa

Alliberar el semàfor tan bon punt arriben les capçaleres de resposta pot frustrar el límit previst. Un cos en streaming pot continuar utilitzant la connexió molt després. Conserva el permís fins que el cos s'hagi consumit o la resposta s'hagi tancat segons el flux de treball de l'aplicació.

Els gestors de context niats fan visible la neteja quan una excepció o cancel·lació abandona l'operació. Evita adquirir manualment i alliberar només al final d'una funció reeixida.

Els límits de connexió responen una altra pregunta

Els límits del connector d'aiohttp limiten les connexions segons les regles documentades del connector. Continuen sent útils al costat d'un semàfor d'aplicació. Un límit de connexions per destinació no expressa, només pel seu nom, un pressupost compartit per totes les destinacions assignades a un proxy.

Distingeix també la concurrència de la taxa de peticions. Quatre peticions de llarga durada i quatre peticions molt curtes utilitzen la mateixa assignació de concurrència mentre produeixen taxes de peticions per segon diferents. Un servei amb una política de taxa pot requerir marcar el ritme o un limitador de taxa separat.

Tria un identificador de proxy estable i no secret per als registres i les mètriques. Si dues URL amb credencials es refereixen al mateix pool de capacitat, decideix si han de compartir un pressupost. A l'inrevés, ports o comptes diferents poden representar límits separats quan l'operador ho documenta així.

Quan cau el rendiment, inspecciona on espera el treball: el teu semàfor, el connector, la configuració de la connexió del proxy o les lectures de resposta. Apujar tots els límits alhora fa més difícil aquesta distinció i pot moure la cua cap a un proxy que no controles.

Articles relacionats