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)) છે, જોકે આગળથી દૂર કરવાથી બાકીના સૂચિ ઘટકો ખસે છે.
ઇટરેટરનું ઇરાદાપૂર્વક નમ્ર કાર્ય છે. તે ઉપલબ્ધતા ચકાસતું નથી, નિષ્ફળ એન્ટ્રીઓ દૂર કરતું નથી અથવા અલગ જાહેર નિકાસની બાંયધરી આપતું નથી. ઘણા એન્ડપોઇન્ટ એક બહારનું સરનામું વહેંચી શકે છે.
પુનઃપ્રયાસ નીતિ અને પૂલ અપડેટ્સ આ નાના પસંદ કરનારની બહાર રાખો. વહેંચાયેલા ઇટરેટરને સમાંતર કોડમાં ઇરાદાપૂર્વકનું માલિકી મોડેલની પણ જરૂર છે જેથી પસંદ કરેલ એન્ડપોઇન્ટ તેને મેળવનાર કામગીરી સાથે જોડાયેલું રહે.