Тұрақты пул үшін round-robin таңдауы ыңғайлы түрде қысқа болуы мүмкін:

from itertools import cycle

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

endpoint = next(choices)

Үлгі URL мекенжайларын қызметіңізден немесе HTTP прокси тізімінен алынған HTTP соңғы нүктелерімен алмастырыңыз. Кезекті шақырулар A, B, C, содан кейін қайтадан A қайтарады. Келесі сұранысты реттегенде таңдалған мәнді қолданыңыз. Итераторды әр сұраныс үшін қайта жасау реттілікті қайта бастайды. Requests үшін таңдалған соңғы нүктені сұранысқа беріңіз.

Тізімді қаласаңыз, оның бірінші элементін соңына жылжытыңыз. pool.append(pool.pop()) соңғы элементті алып, оны бірден қайтарады; бірінші элемент ешқашан өзгермейді. Кезек операциясы — pool.append(pool.pop(0)), бірақ алдыңғы жақтан алу қалған тізім элементтерін жылжытады.

Итератордың әдейі қарапайым міндеті бар. Ол қолжетімділікті тексермейді, сәтсіз жазбаларды жоймайды және басқа сыртқы шығуды кепілдемейді. Бірнеше соңғы нүкте бір сыртқы мекенжайды бөлісе алады.

Қайталау саясаты мен пул жаңартуларын осы шағын таңдаушыдан тыс ұстаңыз. Ортақ итераторға да параллель кодта әдейі меншік моделі қажет, сонда таңдалған соңғы нүкте оны қабылдаған операцияға байланысты болып қалады.

Қатысты мақалалар