Вибір проксі по колу в 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)), хоча видалення з початку зсуває решту елементів списку.
Ітератор має навмисно скромне завдання. Він не перевіряє доступність, не видаляє невдалі записи й не гарантує інший публічний вихід. Кілька ендпоїнтів можуть ділити одну зовнішню адресу.
Тримайте політику повторів і оновлення пулу поза цим маленьким селектором. Спільному ітератору також потрібна навмисна модель володіння в паралельному коді, щоб вибраний ендпоїнт залишався прив'язаним до операції, яка його отримала.