Voor een vaste pool kan round-robin-selectie aangenaam kort zijn:

from itertools import cycle

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

endpoint = next(choices)

Vervang de voorbeeld-URL's door HTTP-eindpunten uit je dienst of uit de HTTP-proxylijst. Opeenvolgende aanroepen geven A, B, C en dan weer A. Gebruik de gekozen waarde bij het instellen van het volgende verzoek. De iterator opnieuw aanmaken voor elk verzoek zou de reeks herstarten. Bij Requests geef je het gekozen eindpunt door aan het verzoek.

Geef je de voorkeur aan een lijst, verplaats dan het eerste item naar achteren. pool.append(pool.pop()) verwijdert het laatste item en zet het direct terug; het eerste item verandert nooit. De wachtrijbewerking is pool.append(pool.pop(0)), maar verwijderen aan de voorkant verschuift de overige lijstitems.

De iterator heeft een bewust bescheiden taak. Hij controleert geen beschikbaarheid, verwijdert geen mislukte items en garandeert geen andere publieke uitgang. Meerdere eindpunten kunnen één extern adres delen.

Houd het herhaalbeleid en poolupdates buiten deze kleine selector. Een gedeelde iterator heeft ook een bewust eigendomsmodel in gelijktijdige code nodig, zodat het gekozen eindpunt verbonden blijft aan de bewerking die het ontving.

Gerelateerde artikelen