हर 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 एक ही क्षमता पूल को संदर्भित करते हैं, तो तय करें कि उन्हें एक बजट साझा करना चाहिए या नहीं। इसके विपरीत, अलग पोर्ट या खाते अलग सीमाएँ निरूपित कर सकते हैं जब ऑपरेटर उन्हें उस तरह प्रलेखित करता है।
जब थ्रूपुट गिरता है, तो जाँचें कि काम कहाँ प्रतीक्षा कर रहा है: आपका सेमाफ़ोर, कनेक्टर, प्रॉक्सी कनेक्शन सेटअप, या प्रतिक्रिया पढ़ाई। एक साथ सभी सीमाएँ बढ़ाना उस अंतर को कठिन बनाता है और कतार को ऐसे प्रॉक्सी में ले जा सकता है जिसे आप नियंत्रित नहीं करते।