Для фіксаванага пула кругавы выбар можа быць прыемна кароткім:

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)), але выдаленне з пачатку зрушвае астатнія элементы спісу.

Ітэратар мае наўмысна сціплую задачу. Ён не правярае даступнасць, не выдаляе няўдалыя запісы і не гарантуе іншы знешні адрас. Некалькі пунктаў могуць дзяліць адзін знешні адрас.

Трымайце палітыку паўторных спроб і абнаўленні пула па-за гэтым маленькім селектарам. Агульны ітэратар таксама патрабуе наўмыснай мадэлі ўласнасці ў параллельным кодзе, каб выбраны пункт заставаўся прывязаным да аперацыі, якая яго атрымала.

Падобныя артыкулы