Proxy B, proxy B novamente e depois proxy A. Seu registro parece suspeito, mas um seletor aleatório tem permissão para fazer exatamente isso.

Escolher da mesma lista em cada solicitação permite repetições. Com dois endpoints igualmente prováveis, a próxima seleção independente tem uma chance em duas de coincidir com a anterior. Uma sequência curta com repetições não é prova de que o seletor ignorou a lista.

Escolha o comportamento que você realmente precisa

RequisitoRegra de seleção
Cada escolha é independenteEscolha da lista elegível a cada vez
Use cada endpoint uma vez antes de recomeçarEmbaralhe uma cópia, consuma-a e então comece outra passagem
Evite o endpoint imediatamente anteriorExclua esse endpoint antes de escolher

Para a última política, trate explicitamente o caso de um único endpoint:

candidates = [endpoint for endpoint in eligible if endpoint != previous]
if not candidates:
    raise RuntimeError("No different eligible proxy is available")
selected = random.choice(candidates)

Este trecho pressupõe que random esteja importado e que a lista de endpoints já esteja validada. Um pool público pode começar com a lista gratuita de proxies quando seus protocolos se adequarem ao cliente final; esta regra de seleção ainda controla repetições. Esperar, reutilizar o único endpoint ou parar é uma política da aplicação. Um loop infinito à espera de um valor aleatório diferente não consegue resolver uma lista que contém apenas uma opção distinta.

Em um despachante concorrente, selecionar e registrar o endpoint anterior também exige propriedade coordenada. Caso contrário, dois trabalhadores podem ambos excluir o valor antigo e escolher o mesmo próximo valor.

Por fim, esta regra diz respeito à identidade do endpoint. Dois endpoints diferentes podem levar a uma única saída pública, e um endpoint de provedor pode levar a várias saídas. Registre isso separadamente antes de decidir que a rotação está avariada.

Artigos relacionados