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

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)), хотя удаление из начала сдвигает остальные элементы списка.

У итератора намеренно скромная задача. Он не проверяет доступность, не удаляет неудачные записи и не гарантирует другой публичный выход. Несколько эндпоинтов могут делить один внешний адрес.

Держите политику повторов и обновления пула вне этого маленького селектора. Общему итератору также нужна намеренная модель владения в параллельном коде, чтобы выбранный эндпоинт оставался привязан к операции, получившей его.

Похожие статьи