Пул от проксита може да съдържа крайни точки с много различна производителност. Разрешаването на петдесет операции в приложението не пречи на четиридесет и девет от тях да изберат едно и също прокси.

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

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 адреса с идентификационни данни сочат към един и същ пул от капацитет, решете дали трябва да споделят един бюджет. Обратно, различни портове или акаунти могат да представляват отделни лимити, когато операторът ги документира така.

Когато пропускателната способност падне, проверете къде чака работата: вашият семафор, конекторът, установяването на връзка с проксито или четенето на отговори. Повишаването на всички лимити наведнъж прави това разграничение по-трудно и може да премести опашката в прокси, което не контролирате.

Подобни статии