Round-Robin-Proxy-Auswal a Python mat itertools.cycle
Benotz en widderhuelenden Iterator fir eng viraussobar Proxy-Auswal aus engem feste Pool, an hal d'Auswal getrennt vun der Ausféierung vun der Ufro an der Gesondheet.
Fir e feste Pool kann d'Round-Robin-Auswal bequem kuerz sinn:
from itertools import cycle
choices = cycle([
"http://proxy-a.example:8080",
"http://proxy-b.example:8080",
"http://proxy-c.example:8080",
])
endpoint = next(choices)
Ersetz d'Beispill-URLen duerch HTTP-Endpunkten aus dengem Service oder aus der HTTP-Proxy-Lëscht. Openeenfolgend Opruffer ginn A, B, C an duerno nach eng Kéier A zréck. Benotz den ausgewielte Wäert beim Astelle vun der nächster Ufro. Wanns de den Iterator fir all Ufro nei erstellst, fänkt d'Reiefolleg vun ufanks un. Bei Requests, gëff den ausgewielten Endpunkt an d'Ufro.
Wanns de eng Lëscht léiwer hues, verschieb hire éischten Element no hannen. pool.append(pool.pop()) hëlt de leschten Element eraus a setzt en direkt zréck; den éischten Element ännert sech ni. D'Queue-Operatioun ass pool.append(pool.pop(0)), awer ewechzehuelen uewe verschitt déi aner Lëschtelementer.
Den Iterator huet eng bewosst bescheide Aufgab. Hie kontrolléiert net d'Disponibilitéit, hie läscht keng feelgeschloen Elementer an hie garantéiert keen aneren ëffentlechen Ausgang. Méi Endpunkten kënnen eng baussenzeg Adress deelen.
Hal d'Widderhuelungspolitik an d'Pool-Aktualiséierungen ausserhalb vun dësem klenge Selekter. En gedeelten Iterator brauch och en bewosst Besëtzmodell am parallele Code, sou datt den ausgewielten Endpunkt un d'Operatioun gebonnen bleift, déi en krut.