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

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

Ітератор має навмисно скромне завдання. Він не перевіряє доступність, не видаляє невдалі записи й не гарантує інший публічний вихід. Кілька ендпоїнтів можуть ділити одну зовнішню адресу.

Тримайте політику повторів і оновлення пулу поза цим маленьким селектором. Спільному ітератору також потрібна навмисна модель володіння в паралельному коді, щоб вибраний ендпоїнт залишався прив'язаним до операції, яка його отримала.

Схожі статті