Python में itertools.cycle के साथ round-robin प्रॉक्सी चयन
स्थिर पूल से पूर्वानुमेय प्रॉक्सी चयन के लिए दोहराने वाला इटरेटर उपयोग करें, और चयन को अनुरोध निष्पादन तथा स्वास्थ्य से अलग रखें।
स्थिर पूल के लिए round-robin चयन सुखद रूप से छोटा हो सकता है:
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)) है, हालाँकि आगे से हटाने पर शेष सूची तत्व खिसक जाते हैं।
इटरेटर का काम जानबूझकर सीमित है। यह उपलब्धता जाँचता नहीं, विफल प्रविष्टियाँ नहीं हटाता और भिन्न सार्वजनिक निकास की गारंटी नहीं देता। कई एंडपॉइंट एक ही बाहरी पता साझा कर सकते हैं।
पुनःप्रयास नीति और पूल अपडेट इस छोटे चयनकर्ता से बाहर रखें। साझा इटरेटर को समवर्ती कोड में जानबूझकर स्वामित्व मॉडल की भी आवश्यकता होती है, ताकि चयनित एंडपॉइंट उसी संक्रिया से जुड़ा रहे जिसने उसे प्राप्त किया।