Seleção de proxy round-robin em Python com itertools.cycle
Use um iterador repetitivo para uma seleção de proxy previsível de um conjunto fixo, mantendo a seleção separada da execução da requisição e da saúde.
Para um conjunto fixo, a seleção round-robin pode ser agradavelmente 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)
Substitua os URL de exemplo por endpoints HTTP do seu serviço ou da lista de proxies HTTP. Chamadas sucessivas retornam A, B, C e depois A novamente. Use o valor selecionado ao configurar a requisição seguinte. Recriar o iterador a cada requisição reiniciaria a sequência. Com Requests, passe o endpoint selecionado para a requisição.
Se preferir uma lista, mova o primeiro item dela para o fim. pool.append(pool.pop()) remove o último item e o devolve logo em seguida; o primeiro item nunca muda. A operação de fila é pool.append(pool.pop(0)), embora remover da frente desloque os itens restantes da lista.
O iterador tem uma tarefa deliberadamente modesta. Não verifica disponibilidade, não remove entradas com falha nem garante uma saída pública diferente. Vários endpoints podem compartilhar um mesmo endereço externo.
Mantenha a política de novas tentativas e as atualizações do conjunto fora deste pequeno seletor. Um iterador compartilhado também precisa de um modelo de posse intencional em código concorrente, para que o endpoint escolhido continue ligado à operação que o recebeu.