Дајте сваком aiohttp проксију сопствени буџет паралелности
Ограничите рад у току по изабраном проксију уз задржавање ограничења aiohttp пула веза и чишћења одговора.
Пул проксија може садржати крајње тачке врло различитих капацитета. Допуштање педесет операција у апликацији не спречава четрдесет девет од њих да изаберу исти прокси.
Ако је правило „највише четири операције у току кроз сваки изабрани прокси“, изразите то правило директно. Држите семафор за сваки идентитет проксија и стекните га око посла који троши капацитет проксија.
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-а са акредитивима упућују на исти пул капацитета, одлучите да ли треба да деле један буџет. Обрнуто, различити портови или налози могу представљати засебна ограничења када их оператер тако документује.
Када пропусност падне, проверите где посао чека: ваш семафор, конектор, успостављање прокси везе или читања одговора. Подизање свих ограничења одједном отежава ту разлику и може преместити ред у прокси који не контролишете.