Round-robin odabir proxyja u Pythonu pomoću itertools.cycle
Koristite iterator koji se ponavlja za predvidljiv odabir proxyja iz fiksnog skupa, držeći odabir odvojenim od izvršavanja zahtjeva i zdravlja.
Za fiksni skup round-robin odabir može biti ugodno kratak:
from itertools import cycle
choices = cycle([
"http://proxy-a.example:8080",
"http://proxy-b.example:8080",
"http://proxy-c.example:8080",
])
endpoint = next(choices)
Zamenite primere URL-ova HTTP krajnjim tačkama iz svoje usluge ili sa liste HTTP proxyja. Uzastopni pozivi vraćaju A, B, C, pa opet A. Koristite odabranu vrednost pri podešavanju sledećeg zahteva. Ponovno stvaranje iteratora za svaki zahtev resetovalo bi niz. Za Requests, prosledite odabranu krajnju tačku u zahtev.
Ako preferirate listu, premestite njen prvi element na kraj. pool.append(pool.pop()) uklanja poslednji element i odmah ga vraća; prvi element se nikada ne menja. Operacija reda je pool.append(pool.pop(0)), ali uklanjanje s početka pomera preostale elemente liste.
Iterator ima namerno skroman zadatak. Ne proverava dostupnost, ne uklanja neuspele unose niti garantuje drugačiji javni izlaz. Nekoliko krajnjih tačaka može deliti jednu spoljnu adresu.
Držite politiku ponovnih pokušaja i ažuriranja skupa izvan ovog malog selektora. Deljeni iterator takođe zahteva namerni model vlasništva u paralelnom kodu kako bi odabrana krajnja tačka ostala vezana za operaciju koja ju je primila.