For en fast pool kan round-robin-valg være behagelig 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)

Erstatt eksempel-URL-ene med HTTP-endepunkter fra tjenesten din eller fra HTTP-proxylisten. Påfølgende kall returnerer A, B, C og deretter A igjen. Bruk den valgte verdien når du konfigurerer den neste forespørselen. Hvis iteratoren opprettes på nytt for hver forespørsel, starter sekvensen forfra. Med Requests, send det valgte endepunktet inn i forespørselen.

Hvis du foretrekker en liste, flytt det første elementet til slutten. pool.append(pool.pop()) fjerner det siste elementet og legger det rett tilbake; det første elementet endres aldri. Køoperasjonen er pool.append(pool.pop(0)), men fjerning forfra forskyver de resterende listeelementene.

Iteratoren har en bevisst beskjeden oppgave. Den sjekker ikke tilgjengelighet, fjerner ikke mislykkede oppføringer og garanterer ikke en annen offentlig utgang. Flere endepunkter kan dele én utadgående adresse.

Hold retry-policyen og pooloppdateringer utenfor denne lille velgeren. En delt iterator trenger også en bevisst eierskapsmodell i samtidig kode, slik at det valgte endepunktet forblir knyttet til operasjonen som mottok det.

Relaterte artikler