Para un conjunto fijo, la selección round-robin puede ser agradablemente breve:

from itertools import cycle

choices = cycle([
    "http://proxy-a.example:8080",
    "http://proxy-b.example:8080",
    "http://proxy-c.example:8080",
])

endpoint = next(choices)

Sustituye las URL de ejemplo por puntos finales HTTP de tu servicio o de la lista de proxies HTTP. Las llamadas sucesivas devuelven A, B, C y luego A otra vez. Usa el valor seleccionado al configurar la petición siguiente. Volver a crear el iterador para cada petición reiniciaría la secuencia. Con Requests, pasa el punto final seleccionado a la petición.

Si prefieres una lista, mueve su primer elemento al final. pool.append(pool.pop()) elimina el último elemento y lo devuelve de inmediato; el primer elemento nunca cambia. La operación de cola es pool.append(pool.pop(0)), aunque eliminar del principio desplaza los elementos restantes de la lista.

El iterador tiene una tarea deliberadamente modesta. No comprueba la disponibilidad, no elimina entradas fallidas ni garantiza una salida pública distinta. Varios puntos finales pueden compartir una misma dirección externa.

Mantén la política de reintentos y las actualizaciones del conjunto fuera de este pequeño selector. Un iterador compartido también necesita un modelo de propiedad intencionado en código concurrente para que el punto final elegido siga ligado a la operación que lo recibió.

Artículos relacionados