Տվեք յուրաքանչյուր 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 պրոքսիների ցանկը տրամադրում է թեկնածուներ aiohttp-ի պրոքսի URL-ների համար: Իրական հավելվածը պետք է նաև սահմանի իր հարցման ժամկետը և որոշի, թե որքան պատասխանի տվյալ է անհրաժեշտ: Մեծ ֆայլն ամբողջությամբ հիշողության մեջ կարդալը առանձին ռեսուրսային որոշում է:
Պահեք թույլտվությունը թանկ մասի համար
Սեմաֆորի ազատումը հենց պատասխանի վերնագրերի գալուն պես կարող է խափանել նախատեսված սահմանը: Հոսքային մարմինը կարող է շարունակել օգտագործել միացումը դրանից շատ ավելի ուշ: Պահեք թույլտվությունը, մինչև մարմինը սպառվի կամ պատասխանը փակվի հավելվածի աշխատահոսքի համաձայն:
Ներդրված կոնտեքստի կառավարիչները մաքրումը տեսանելի են դարձնում, երբ բացառությունը կամ չեղարկումը թողնում է գործողությունը: Խուսափեք ձեռքով ձեռքբերումից և ազատումից միայն հաջող ֆունկցիայի ներքևում:
Միացումների սահմանները պատասխանում են այլ հարցի
aiohttp-ի միացնողի սահմանները սահմանափակում են միացումները միացնողի փաստաթղթավորված կանոններով: Դրանք օգտակար են մնում հավելվածի սեմաֆորի կողքին: Յուրաքանչյուր նպակայանի միացման սահմանը միայն իր անունով չի արտահայտում մեկ պրոքսիին հատկացված բոլոր նպատակակետերի կողմից կիսվող բյուջեն:
Տարբերեք նաև զուգահեռականությունը հարցումների արագությունից: Չորս երկարաժամկետ հարցում և չորս շատ կարճ հարցում օգտագործում են նույն զուգահեռականության չափաբաժինը՝ միաժամանակ ստեղծելով տարբեր հարցումներ-վայրկյանում արագություններ: Արագության քաղաքականությամբ ծառայությունը կարող է պահանջել ռիթմավորում կամ առանձին արագության սահմանափակիչ:
Ընտրեք կայուն, ոչ գաղտնի պրոքսիի նույնացուցիչ մատյանների և չափումների համար: Եթե երկու հավատարմագրեր կրող URL վերաբերում են նույն հզորության լողավազանին, որոշեք՝ արդյոք նրանք պետք է կիսեն մեկ բյուջե: Հակառակը, տարբեր նավահանգիստներ կամ հաշիվներ կարող են ներկայացնել առանձին սահմաններ, երբ օպերատորը այդպես է փաստաթղթավորում դրանք:
Երբ թողունակությունը նվազում է, ստուգեք, թե որտեղ է սպասում աշխատանքը՝ ձեր սեմաֆորը, միացնողը, պրոքսիի միացման կարգավորումը կամ պատասխանների ընթերցումը: Բոլոր սահմանները միաժամանակ բարձրացնելը դժվարացնում է այդ տարբերակումը և կարող է հերթը տեղափոխել ձեր չվերահսկվող պրոքսի: