Python-da itertools.cycle ilə round-robin proxy seçimi
Sabit hovuzdan proqnozlaşdırıla bilən proxy seçimi üçün təkrarlanan iterator istifadə edin, seçimi sorğunun icrasından və sağlamlıqdan ayrı saxlayın.
Sabit hovuz üçün round-robin seçimi rahat dərəcədə kiçik ola bilər:
from itertools import cycle
choices = cycle([
"http://proxy-a.example:8080",
"http://proxy-b.example:8080",
"http://proxy-c.example:8080",
])
endpoint = next(choices)
Nümunə URL-ləri xidmətinizdən və ya HTTP proxy siyahısından HTTP son nöqtələri ilə əvəz edin. Ardıcıl çağırışlar A, B, C, sonra yenidən A qaytarır. Sonrakı sorğunu qurarkən seçilmiş dəyərdən istifadə edin. Iteratoru hər sorğu üçün yenidən yaratmaq ardıcıllığı yenidən başladar. Requests üçün seçilmiş son nöqtəni sorğuya ötürün.
Siyahıya üstünlük verirsinizsə, onun ilk elementini arxaya keçirin. pool.append(pool.pop()) son elementi çıxarır və dərhal geri qoyur; birinci element heç vaxt dəyişmir. Növbə əməliyyatı pool.append(pool.pop(0))-dir, lakin öndən çıxarmaq qalan siyahı elementlərini sürüşdürür.
Iteratorun qəsdən təvazökar bir vəzifəsi var. O, mövcudluğu yoxlamır, uğursuz girişləri silmir və fərqli ictimai çıxış zəmanət vermir. Bir neçə son nöqtə eyni xarici ünvanı paylaşa bilər.
Yenidən cəhd siyasətini və hovuz yeniləmələrini bu kiçik seçicidən kənarda saxlayın. Paylaşılan iterator həm də paralel kodda qəsdən sahiblik modeli tələb edir ki, seçilmiş son nöqtə onu alan əməliyyata bağlı qalsın.