Selezione proxy round-robin in Python con itertools.cycle
Usa un iteratore ripetitivo per una selezione proxy prevedibile da un pool fisso, mantenendo la selezione separata dall'esecuzione della richiesta e dallo stato di salute.
Per un pool fisso, la selezione round-robin può essere piacevolmente breve:
from itertools import cycle
choices = cycle([
"http://proxy-a.example:8080",
"http://proxy-b.example:8080",
"http://proxy-c.example:8080",
])
endpoint = next(choices)
Sostituisci gli URL di esempio con endpoint HTTP del tuo servizio o dalla lista di proxy HTTP. Le chiamate successive restituiscono A, B, C e poi di nuovo A. Usa il valore selezionato quando configuri la richiesta successiva. Ricreare l'iteratore per ogni richiesta riavvierebbe la sequenza. Con Requests, passa l'endpoint selezionato alla richiesta.
Se preferisci una lista, spostane il primo elemento in fondo. pool.append(pool.pop()) rimuove l'ultimo elemento e lo rimette subito; il primo elemento non cambia mai. L'operazione di coda è pool.append(pool.pop(0)), anche se rimuovere dalla testa sposta gli altri elementi della lista.
L'iteratore ha un compito volutamente modesto. Non controlla la disponibilità, non rimuove le voci non riuscite e non garantisce un'uscita pubblica diversa. Più endpoint possono condividere un solo indirizzo esterno.
Tieni la politica di retry e gli aggiornamenti del pool fuori da questo piccolo selettore. Un iteratore condiviso ha anche bisogno di un modello di proprietà intenzionale nel codice concorrente, così che l'endpoint scelto resti legato all'operazione che lo ha ricevuto.