Proxy B, din nou proxy B, apoi proxy A. Jurnalul dvs. pare suspect, dar un selector aleatoriu are voie să facă exact asta.

Alegerea din aceeași listă la fiecare cerere permite repetări. Cu două puncte finale la fel de probabile, următoarea selecție independentă are o șansă din două să coincidă cu cea anterioară. O secvență scurtă cu repetări nu este dovada că selectorul a ignorat lista.

Alegeți comportamentul de care aveți nevoie cu adevărat

CerințăRegulă de selecție
Fiecare alegere este independentăAlegeți din lista eligibilă de fiecare dată
Folosiți fiecare punct final o dată înainte de a reîncepeAmestecați o copie, consumați-o, apoi începeți o altă trecere
Evitați punctul final imediat anteriorExcludeți acel punct final înainte de a alege

Pentru ultima politică, tratați explicit cazul cu un singur punct final:

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

Acest fragment presupune că random este importat și lista de puncte finale este deja validată. Un pool public poate începe cu lista gratuită de proxy atunci când protocoalele sale se potrivesc clientului final; această regulă de selecție controlează în continuare repetările. Dacă să așteptați, să reutilizați singurul punct final sau să vă opriți este o politică a aplicației. O buclă infinită care așteaptă o altă valoare aleatorie nu poate rezolva o listă care conține o singură opțiune distinctă.

Într-un dispecer concurent, selectarea și înregistrarea punctului final anterior necesită, de asemenea, proprietate coordonată. Altfel, doi lucrători pot exclude amândoi valoarea veche și pot alege aceeași valoare următoare.

În cele din urmă, această regulă privește identitatea punctului final. Două puncte finale diferite pot duce la o singură ieșire publică, iar un punct final al unui furnizor poate duce la mai multe ieșiri. Înregistrați-le separat înainte de a decide că rotația este defectă.

Articole similare