Кругавы выбар проксі ў Python з дапамогай itertools.cycle
Выкарыстоўвайце паўтаральны ітэратар для прадказальнага выбару проксі з фіксаванага пула, аддзяляючы выбар ад выканання запыту і стану здароўя.
Для фіксаванага пула кругавы выбар можа быць прыемна кароткім:
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)), але выдаленне з пачатку зрушвае астатнія элементы спісу.
Ітэратар мае наўмысна сціплую задачу. Ён не правярае даступнасць, не выдаляе няўдалыя запісы і не гарантуе іншы знешні адрас. Некалькі пунктаў могуць дзяліць адзін знешні адрас.
Трымайце палітыку паўторных спроб і абнаўленні пула па-за гэтым маленькім селектарам. Агульны ітэратар таксама патрабуе наўмыснай мадэлі ўласнасці ў параллельным кодзе, каб выбраны пункт заставаўся прывязаным да аперацыі, якая яго атрымала.