প্রতিটি 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 একই সক্ষমতা পুল নির্দেশ করে, তবে সিদ্ধান্ত নিন তারা একটি বাজেট ভাগ করবে কি না। বিপরীতভাবে, ভিন্ন পোর্ট বা অ্যাকাউন্ট আলাদা সীমা প্রতিনিধিত্ব করতে পারে যখন অপারেটর সেভাবেই নথিভুক্ত করে।
যখন থ্রুপুট কমে, কাজ কোথায় অপেক্ষা করছে তা পরীক্ষা করুন: আপনার সেমাফোর, কানেক্টর, প্রক্সি সংযোগ সেটআপ, বা প্রতিক্রিয়া পাঠ। একসাথে সব সীমা বাড়ানো সেই পার্থক্য করা কঠিন করে এবং সারিটিকে এমন প্রক্সিতে সরাতে পারে যা আপনি নিয়ন্ত্রণ করেন না।