Un pool de proxys pode conter puntos finais con capacidades moi diferentes. Permitir cincuenta operacións en toda a aplicación non impide que corenta e nove delas elixan o mesmo proxy.

Se a política é «como máximo catro operacións en curso por cada proxy seleccionado», expresa esa política directamente. Mantén un semáforo por cada identidade de proxy e adquíreo arredor do traballo que consume a capacidade do 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()

Este esbozo supón que asyncio se importou e que os URL dos proxys se validaron. Para as solicitudes públicas nunha ruta de proxy público permitida, a lista de proxys HTTP proporciona candidatos para os URL de proxy de aiohttp. Unha aplicación real tamén debería establecer o seu propio tempo de espera de solicitude e decidir cantos datos de resposta necesita. Ler un ficheiro grande por completo en memoria é unha decisión de recursos aparte.

Conserva o permiso para a parte custosa

Liberar o semáforo en canto chegan as cabeceiras de resposta pode frustrar o límite previsto. Un corpo en streaming pode seguir usando a conexión moito despois. Conserva o permiso ata que o corpo se consuma ou a resposta se peche segundo o fluxo de traballo da aplicación.

Os xestores de contexto aniñados fan visible a limpeza cando unha excepción ou cancelación abandona a operación. Evita adquirir manualmente e liberar só ao final dunha función exitosa.

Os límites de conexión responden a outra pregunta

Os límites do conector de aiohttp limitan as conexións segundo as regras documentadas do conector. Seguen a ser útiles xunto a un semáforo de aplicación. Un límite de conexións por destino non expresa, só polo seu nome, un orzamento compartido por todos os destinos asignados a un proxy.

Distingue tamén a concorrencia da taxa de solicitudes. Catro solicitudes de longa duración e catro solicitudes moi curtas usan a mesma asignación de concorrencia mentres producen taxas de solicitudes por segundo diferentes. Un servizo cunha política de taxa pode requirir marcar o ritmo ou un limitador de taxa separado.

Elixe un identificador de proxy estable e non secreto para os rexistros e as métricas. Se dous URL con credenciais se refiren ao mesmo pool de capacidade, decide se deben compartir un orzamento. Pola contra, portos ou contas diferentes poden representar límites separados cando o operador o documenta así.

Cando cae o rendemento, inspecciona onde espera o traballo: o teu semáforo, o conector, o establecemento da conexión do proxy ou as lecturas de resposta. Subir todos os límites á vez fai máis difícil esa distinción e pode mover a cola cara a un proxy que non controlas.

Artigos relacionados