For en fast pulje kan round-robin-valg være behageligt kort:

from itertools import cycle

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

endpoint = next(choices)

Erstat eksempel-URL'erne med HTTP-endepunkter fra din tjeneste eller fra HTTP-proxylisten. Efterfølgende kald returnerer A, B, C og derefter A igen. Brug den valgte værdi, når du konfigurerer den næste anmodning. Hvis iteratoren genskabes for hver anmodning, starter sekvensen forfra. Til Requests, send det valgte endepunkt med i anmodningen.

Foretrækker du en liste, flyt dens første element til sidst. pool.append(pool.pop()) fjerner det sidste element og lægger det direkte tilbage; det første element ændres aldrig. Køoperationen er pool.append(pool.pop(0)), men fjernelse forfra flytter de resterende listeelementer.

Iteratoren har en bevidst beskeden opgave. Den kontrollerer ikke tilgængelighed, fjerner ikke mislykkede poster og garanterer ikke en anden offentlig udgang. Flere endepunkter kan dele én udadgående adresse.

Hold genforsøgspolitik og puljeopdateringer uden for denne lille vælger. En delt iterator har også brug for en bevidst ejerskabsmodel i samtidig kode, så det valgte endepunkt forbliver knyttet til den handling, der modtog det.

Relaterede artikler