Fix készlet esetén a round-robin választás kellemesen rövid lehet:

from itertools import cycle

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

endpoint = next(choices)

Cserélje le a minta URL-eket a szolgáltatásából vagy a HTTP proxylistából származó HTTP végpontokra. Az egymást követő hívások A, B, C, majd ismét A értéket adnak vissza. A kiválasztott értéket használja a következő kérés beállításakor. Ha minden kéréshez újra létrehozná az iterátort, a sorozat elölről kezdődne. Requests esetén adja át a kiválasztott végpontot a kérésnek.

Ha inkább listát szeretne, helyezze annak első elemét a végére. A pool.append(pool.pop()) eltávolítja az utolsó elemet, és azonnal vissza is teszi; az első elem soha nem változik. A sor művelete a pool.append(pool.pop(0)), bár az elöli eltávolítás eltolja a lista többi elemét.

Az iterátornak szándékosan szerény feladata van. Nem ellenőrzi az elérhetőséget, nem távolítja el a sikertelen bejegyzéseket, és nem garantál más nyilvános kimenetet. Több végpont is osztozhat egy külső címen.

Tartsa az újrapróbálkozási szabályzatot és a készlet frissítéseit ezen a kis választón kívül. A megosztott iterátornak szándékos tulajdonlási modellre van szüksége a párhuzamos kódban is, hogy a kiválasztott végpont ahhoz a művelethez kötve maradjon, amely kapta.

Kapcsolódó cikkek