Vir 'n vaste poel kan round-robin-keuse aangenaam klein wees:

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 die voorbeeld-URL's met HTTP-eindpunte uit jou diens of die HTTP-proxylys. Opeenvolgende oproepe gee A, B, C en dan weer A. Gebruik die gekose waarde wanneer jy die daaropvolgende versoek opstel. As jy die iterator vir elke versoek weer skep, sal die reeks herbegin. Vir Requests, gee die gekose eindpunt aan die versoek.

As jy 'n lys verkies, skuif die voorste item na agter. pool.append(pool.pop()) verwyder die laaste item en sit dit direk terug; die eerste item verander nooit. Die beurtbewerking is pool.append(pool.pop(0)), maar om van voor te verwyder skuif die oorblywende lys-elemente.

Die iterator het 'n doelbewus beskeie taak. Dit kyk nie na beskikbaarheid nie, verwyder nie mislukte inskrywings nie en waarborg nie 'n ander openbare uitgang nie. Verskeie eindpunte kan een uitwaartse adres deel.

Hou herprobeerbeleid en poelopdaterings buite hierdie klein keuse. 'n Gedeelde iterator het ook 'n doelbewuste eienaarskapsmodel in gelyktydige kode nodig sodat die gekose eindpunt aan die bewerking wat dit ontvang het, gekoppel bly.

Verwante artikels