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)
Zamijenite primjere 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 vrijednost pri podešavanju sljedećeg zahtjeva. Ponovno stvaranje iteratora za svaki zahtjev resetovalo bi niz. Za Requests, proslijedite odabranu krajnju tačku u zahtjev.
Ako preferirate listu, premjestite njen prvi element na kraj. pool.append(pool.pop()) uklanja posljednji element i odmah ga vraća; prvi element se nikada ne mijenja. Operacija reda je pool.append(pool.pop(0)), ali uklanjanje s početka pomjera preostale elemente liste.
Iterator ima namjerno skroman zadatak. Ne provjerava dostupnost, ne uklanja neuspjele unose niti garantuje drugačiji javni izlaz. Nekoliko krajnjih tačaka može dijeliti jednu vanjsku adresu.
Držite politiku ponovnih pokušaja i ažuriranja skupa izvan ovog malog selektora. Dijeljeni iterator također zahtijeva namjerni model vlasništva u paralelnom kodu kako bi odabrana krajnja tačka ostala vezana za operaciju koja ju je primila.