Bigyan ang bawat aiohttp proxy ng sarili nitong badyet sa sabayang pagpapatupad
Limitahan ang kasalukuyang gawain bawat napiling proxy habang pinapanatili ang mga hangganan ng pool ng koneksyon ng aiohttp at ang paglilinis ng mga tugon.
Ang pool ng proxy ay maaaring maglaman ng mga endpoint na may lubos na magkakaibang kakayahan. Ang pagpayag sa limampung operasyon sa buong aplikasyon ay hindi pumipigil sa apatnapu’t siyam sa mga ito na pumili ng parehong proxy.
Kung ang patakaran ay «hindi hihigit sa apat na kasalukuyang operasyon sa bawat napiling proxy», ipahayag nang tuwiran ang patakarang iyon. Panatilihin ang isang semaphore para sa bawat pagkakakilanlan ng proxy, at kunin ito sa paligid ng gawaing gumagamit ng kakayahan ng 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()Ipinapalagay ng sketch na ito na na-import na ang asyncio at na-validate na ang mga URL ng proxy. Para sa mga pampublikong kahilingan sa pinapayagang pampublikong ruta ng proxy, ang listahan ng HTTP proxy ay nagbibigay ng mga kandidato para sa mga URL ng proxy ng aiohttp. Ang isang tunay na aplikasyon ay dapat ding magtakda ng sarili nitong timeout ng kahilingan at magpasya kung gaano karaming data ng tugon ang kailangan nito. Ang pagbasa ng malaking file nang buo sa memorya ay isang hiwalay na desisyon sa mapagkukunan.
Panatilihin ang pahintulot para sa mamahaling bahagi
Ang pagpapalaya sa semaphore sa sandaling dumating ang mga header ng tugon ay maaaring mabigo ang inilaan na hangganan. Ang isang streaming body ay maaaring magpatuloy na gamitin ang koneksyon nang matagal pagkatapos. Panatilihin ang pahintulot hanggang sa maubos ang body o maisara ang tugon ayon sa daloy ng trabaho ng aplikasyon.
Ang mga nested na tagapamahala ng konteksto ay ginagawang nakikita ang paglilinis kapag may exception o pagkansela na lumalabas sa operasyon. Iwasan ang manu-manong pagkuha at pagpapalaya lamang sa ilalim ng matagumpay na function.
Ang mga hangganan ng koneksyon ay sumasagot sa ibang tanong
Ang mga hangganan ng connector ng aiohttp ay naglilimita sa mga koneksyon ayon sa mga dokumentadong patakaran ng connector. Nananatili silang kapaki-pakinabang kasama ng semaphore ng aplikasyon. Ang hangganan ng koneksyon bawat destinasyon ay hindi nagpapahayag, sa pamamagitan lamang ng pangalan nito, ng badyet na ibinabahagi ng lahat ng destinasyong itinalaga sa isang proxy.
Ihiwalay din ang sabayang pagpapatupad sa rate ng kahilingan. Apat na pangmatagalang kahilingan at apat na napakaikling kahilingan ay gumagamit ng parehong allotment ng sabayang pagpapatupad habang gumagawa ng magkakaibang rate ng kahilingan bawat segundo. Ang isang serbisyong may patakaran sa rate ay maaaring mangailangan ng pacing o hiwalay na limiter ng rate.
Pumili ng matatag at hindi lihim na identifier ng proxy para sa mga log at metric. Kung ang dalawang URL na may mga kredensyal ay tumutukoy sa parehong pool ng kakayahan, magpasya kung dapat nilang ibahagi ang isang badyet. Sa kabaligtaran, ang magkakaibang port o account ay maaaring kumatawan sa hiwalay na mga hangganan kapag dokumentado ito ng operator nang gayon.
Kapag bumaba ang throughput, siyasatin kung saan naghihintay ang gawain: ang iyong semaphore, ang connector, ang pag-set up ng koneksyon sa proxy, o ang pagbasa ng mga tugon. Ang pagtaas ng lahat ng hangganan nang sabay-sabay ay nagpapahirap sa pagkakaibang iyon at maaaring ilipat ang pila sa isang proxy na hindi mo kontrolado.