Para un conxunto fixo, a selección round-robin pode ser agradablemente 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)

Substitúe as URL de exemplo por puntos finais HTTP do teu servizo ou da lista de proxies HTTP. As chamadas sucesivas devolven A, B, C e despois A outra vez. Usa o valor seleccionado ao configurar a seguinte petición. Volver crear o iterador para cada petición reiniciaría a secuencia. Con Requests, pasa o punto final seleccionado á petición.

Se prefires unha lista, move o seu primeiro elemento ao final. pool.append(pool.pop()) elimina o último elemento e devólveo de inmediato; o primeiro elemento nunca cambia. A operación de cola é pool.append(pool.pop(0)), aínda que eliminar desde diante despraza os elementos restantes da lista.

O iterador ten unha tarefa deliberadamente modesta. Non comproba a dispoñibilidade, non elimina entradas fallidas nin garante unha saída pública distinta. Varios puntos finais poden compartir un mesmo enderezo externo.

Mantén a política de reintentos e as actualizacións do conxunto fóra deste pequeno selector. Un iterador compartido tamén necesita un modelo de propiedade intencionado en código concorrente para que o punto final escollido siga ligado á operación que o recibiu.

Artigos relacionados