itertools.cycle ile Python'da round-robin proxy seçimi
Sabit bir havuzdan öngörülebilir proxy seçimi için yinelemeli bir yineleyici kullanın; seçimi istek yürütmesinden ve sağlıktan ayrı tutun.
Sabit bir havuz için round-robin seçimi hoş biçimde kısa olabilir:
from itertools import cycle
choices = cycle([
"http://proxy-a.example:8080",
"http://proxy-b.example:8080",
"http://proxy-c.example:8080",
])
endpoint = next(choices)
Örnek URL'leri hizmetinizden veya HTTP proxy listesinden gelen HTTP uç noktalarıyla değiştirin. Ardışık çağrılar A, B, C ve sonra yeniden A döndürür. Seçilen değeri bir sonraki isteği yapılandırırken kullanın. Yineleyiciyi her istek için yeniden oluşturmak diziyi baştan başlatır. Requests için seçilen uç noktayı isteğe aktarın.
Bir liste tercih ederseniz ilk öğesini sona taşıyın. pool.append(pool.pop()) son öğeyi çıkarır ve hemen geri koyar; ilk öğe asla değişmez. Kuyruk işlemi pool.append(pool.pop(0)) olsa da önden çıkarmak kalan liste öğelerini kaydırır.
Yineleyicinin bilerek mütevazı bir görevi vardır. Kullanılabilirliği denetlemez, başarısız girdileri kaldırmaz ve farklı bir genel çıkış garanti etmez. Birden çok uç nokta tek bir dış adresi paylaşabilir.
Yeniden deneme politikasını ve havuz güncellemelerini bu küçük seçicinin dışında tutun. Paylaşılan bir yineleyici ayrıca eşzamanlı kodda bilinçli bir sahiplik modeli gerektirir, böylece seçilen uç nokta onu alan işleme bağlı kalır.