Dla stałej puli wybór round-robin może być przyjemnie krótki:

from itertools import cycle

choices = cycle([
    "http://proxy-a.example:8080",
    "http://proxy-b.example:8080",
    "http://proxy-c.example:8080",
])

endpoint = next(choices)

Zastąp przykładowe adresy URL punktami końcowymi HTTP z twojej usługi lub z listy proxy HTTP. Kolejne wywołania zwracają A, B, C, a potem znowu A. Użyj wybranej wartości przy konfigurowaniu następnego żądania. Ponowne utworzenie iteratora dla każdego żądania restartowałoby sekwencję. W Requests przekaż wybrany punkt końcowy do żądania.

Jeśli wolisz listę, przenieś jej pierwszy element na koniec. pool.append(pool.pop()) usuwa ostatni element i od razu go odkłada; pierwszy element nigdy się nie zmienia. Operacją kolejki jest pool.append(pool.pop(0)), choć usuwanie z przodu przesuwa pozostałe elementy listy.

Iterator ma celowo skromne zadanie. Nie sprawdza dostępności, nie usuwa nieudanych wpisów ani nie gwarantuje innego publicznego wyjścia. Kilka punktów końcowych może dzielić jeden adres zewnętrzny.

Politykę ponowień i aktualizacje puli trzymaj poza tym małym selektorem. Współdzielony iterator potrzebuje też celowego modelu własności w kodzie współbieżnym, aby wybrany punkt końcowy pozostał przypisany do operacji, która go otrzymała.

Powiązane artykuły