Базен на прокси може да содржи крајни точки со многу различен капацитет. Дозволувањето педесет операции во апликацијата не спречува четириесет и девет од нив да го изберат истиот прокси.

Ако политиката е „најмногу четири операции во тек преку секој избран прокси“, изразете ја таа политика директно. Држете семафор за секој идентитет на прокси и стекнете го околу работата што го троши капацитетот на проксито.

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

Оваа скица претпоставува дека asyncio е увезен и дека URL-ата на проксито се валидирани. За јавни барања на дозволена јавна прокси рута, списокот на HTTP прокси обезбедува кандидати за URL-ата на проксито во aiohttp. Вистинската апликација треба да постави и сопствено временско ограничување на барањето и да одлучи колку податоци од одговорот ѝ се потребни. Читањето голема датотека целосно во меморија е одделна одлука за ресурси.

Задржете ја дозволата за скапиот дел

Ослободувањето на семафорот штом пристигнат заглавијата на одговорот може да ја уништи предвидената граница. Тековното тело може да продолжи да ја користи врската долго потоа. Задржете ја дозволата додека телото не се потроши или одговорот не се затвори според работниот тек на апликацијата.

Вгнездените контекстни менаџери го прават чистењето видливо кога исклучок или откажување ја напуштаат операцијата. Избегнувајте рачно стекнување и ослободување само на дното на успешна функција.

Границите на врските одговараат на друго прашање

Границите на конекторот на aiohttp ги ограничуваат врските според документираните правила на конекторот. Тие остануваат корисни покрај семафорот на апликацијата. Границата на врски по одредиште не изразува, само по своето име, буџет што го делат сите одредишта доделени на едно прокси.

Разликувајте ја и паралелноста од стапката на барања. Четири долготрајни барања и четири многу кратки барања ја користат истата паралелна квота, но создаваат различни стапки на барања во секунда. Услугата со политика на стапка може да бара темпо или одделен ограничувач на стапка.

Изберете стабилен, не-тајен идентификатор на прокси за дневници и метрики. Ако две URL-а со акредитиви се однесуваат на истиот базен на капацитет, одлучете дали треба да делат еден буџет. Обратно, различни порти или сметки можат да претставуваат одделни граници кога операторот така ги документира.

Кога пропусноста паѓа, испитајте каде работата чека: вашиот семафор, конекторот, поставувањето на врската со проксито или читањето одговори. Подигањето на сите граници одеднаш ја отежнува таа разлика и може да го премести редот во прокси што не го контролирате.

Поврзани статии