Selecció de proxy round-robin en Python amb itertools.cycle
Feu servir un iterador repetitiu per a una selecció de proxy predictible d'un conjunt fix, mantenint la selecció separada de l'execució de la petició i de la salut.
Per a un conjunt fix, la selecció round-robin pot ser agradablement curta:
from itertools import cycle
choices = cycle([
"http://proxy-a.example:8080",
"http://proxy-b.example:8080",
"http://proxy-c.example:8080",
])
endpoint = next(choices)
Substituïu les URL d'exemple per punts finals HTTP del vostre servei o de la llista de proxys HTTP. Les crides successives retornen A, B, C i després A de nou. Feu servir el valor seleccionat en configurar la petició següent. Tornar a crear l'iterador per a cada petició reiniciaria la seqüència. Amb Requests, passeu el punt final seleccionat a la petició.
Si preferiu una llista, moveu-ne el primer element al final. pool.append(pool.pop()) elimina l'últim element i el torna a posar de seguida; el primer element no canvia mai. L'operació de cua és pool.append(pool.pop(0)), però eliminar del davant desplaça la resta d'elements de la llista.
L'iterador té una feina deliberadament modesta. No comprova la disponibilitat, no elimina entrades fallides ni garanteix una sortida pública diferent. Diversos punts finals poden compartir una mateixa adreça externa.
Manteniu la política de reintents i les actualitzacions del conjunt fora d'aquest petit selector. Un iterador compartit també necessita un model de propietat intencionat en codi concurrent perquè el punt final triat romangui lligat a l'operació que el va rebre.