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.

Articles relacionats