একটি নির্দিষ্ট পুলের জন্য রাউন্ড-রবিন নির্বাচন আরামদায়কভাবে ছোট হতে পারে:

from itertools import cycle

choices = cycle([
    "http://proxy-a.example:8080",
    "http://proxy-b.example:8080",
    "http://proxy-c.example:8080",
])

endpoint = next(choices)

নমুনা URL-গুলোকে আপনার পরিষেবা বা HTTP প্রক্সি তালিকা থেকে পাওয়া HTTP এন্ডপয়েন্ট দিয়ে প্রতিস্থাপন করুন। পরপর কলগুলো A, B, C, তারপর আবার A ফেরত দেয়। পরবর্তী অনুরোধ সাজানোর সময় নির্বাচিত মানটি ব্যবহার করুন। প্রতিটি অনুরোধের জন্য ইটারেটর আবার তৈরি করলে ক্রমটি আবার শুরু হবে। Requests-এর জন্য, নির্বাচিত এন্ডপয়েন্টটি অনুরোধে দিন।

আপনি যদি তালিকা পছন্দ করেন, তার প্রথম আইটেমটি পিছনে সরান। pool.append(pool.pop()) শেষ আইটেমটি সরিয়ে সরাসরি ফিরিয়ে দেয়; প্রথম আইটেম কখনও বদলায় না। সারি অপারেশনটি pool.append(pool.pop(0)), তবে সামনে থেকে সরালে বাকি তালিকা উপাদানগুলো স্থানান্তরিত হয়।

ইটারেটরটির উদ্দেশ্যমূলকভাবে সীমিত কাজ। এটি উপলব্ধতা যাচাই করে না, ব্যর্থ এন্ট্রি সরায় না বা আলাদা পাবলিক প্রস্থান নিশ্চিত করে না। একাধিক এন্ডপয়েন্ট একটি বাইরের ঠিকানা ভাগ করতে পারে।

পুনরায় চেষ্টার নীতি ও পুল আপডেট এই ছোট নির্বাচকের বাইরে রাখুন। একটি ভাগ করা ইটারেটরের জন্য সমবর্তী কোডে ইচ্ছাকৃত মালিকানা মডেলও দরকার, যাতে নির্বাচিত এন্ডপয়েন্টটি যে অপারেশন তা পেয়েছে তার সঙ্গে যুক্ত থাকে।

সম্পর্কিত নিবন্ধ