Round-robin tarpinio serverio pasirinkimas Python su itertools.cycle
Naudokite pasikartojantį iteratorių nuspėjamam tarpinio serverio pasirinkimui iš fiksuoto telkinio, pasirinkimą laikydami atskirai nuo užklausos vykdymo ir būsenos.
Fiksuotam telkiniui round-robin pasirinkimas gali būti maloniai trumpas:
from itertools import cycle
choices = cycle([
"http://proxy-a.example:8080",
"http://proxy-b.example:8080",
"http://proxy-c.example:8080",
])
endpoint = next(choices)
Pakeiskite pavyzdinius URL HTTP galiniais taškais iš savo paslaugos arba iš HTTP tarpinių serverių sąrašo. Nuoseklūs iškvietimai grąžina A, B, C, o paskui vėl A. Pasirinktą reikšmę naudokite konfigūruodami kitą užklausą. Jei iteratorių sukursite iš naujo kiekvienai užklausai, seka prasidės iš naujo. Su Requests perduokite pasirinktą galinį tašką užklausai.
Jei mieliau naudojate sąrašą, perkelkite jo pirmąjį elementą į pabaigą. pool.append(pool.pop()) pašalina paskutinį elementą ir iškart jį grąžina; pirmasis elementas niekada nesikeičia. Eilės operacija yra pool.append(pool.pop(0)), tačiau šalinant iš priekio pasislenka likę sąrašo elementai.
Iteratorius turi tyčia kuklią užduotį. Jis netikrina prieinamumo, nepašalina nepavykusių įrašų ir negarantuoja kitokio viešo išėjimo. Keli galiniai taškai gali dalytis vienu išoriniu adresu.
Laikykite kartojimo politiką ir telkinio atnaujinimus už šio mažo parinkiklio ribų. Bendram iteratoriui taip pat reikia tyčinio nuosavybės modelio lygiagrečiame kode, kad pasirinktas galinis taškas liktų susietas su operacija, kuri jį gavo.