Escolhas aleatórias, passagens embaralhadas e endpoints de proxy repetidos
Escolha entre escolhas aleatórias independentes, uma passagem embaralhada e uma política sem repetição imediata, em vez de tratar um endpoint repetido como um rotador avariado.
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
| Requisito | Regra de seleção |
|---|---|
| Cada escolha é independente | Escolha da lista elegível a cada vez |
| Use cada endpoint uma vez antes de recomeçar | Embaralhe uma cópia, consuma-a e então comece outra passagem |
| Evite o endpoint imediatamente anterior | Exclua 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.