ფიქსირებული პულისთვის round-robin არჩევანი სასიამოვნოდ მოკლე შეიძლება იყოს:

from itertools import cycle

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

endpoint = next(choices)

შეცვალეთ მაგალითური URL-ები თქვენი სერვისის ან HTTP პროქსების სიის HTTP ბოლო წერტილებით. თანმიმდევრული გამოძახებები აბრუნებს A, B, C და შემდეგ ისევ A-ს. გამოიყენეთ არჩეული მნიშვნელობა შემდეგი მოთხოვნის კონფიგურაციისას. იტერატორის თითოეული მოთხოვნისთვის ხელახლა შექმნა მიმდევრობას თავიდან დაიწყებს. Requests-ისთვის გადაეცით არჩეული ბოლო წერტილი მოთხოვნას.

თუ სია გირჩევნიათ, გადაიტანეთ მისი პირველი ელემენტი ბოლოში. pool.append(pool.pop()) შლის ბოლო ელემენტს და მაშინვე აბრუნებს მას; პირველი ელემენტი არასდროს იცვლება. რიგის ოპერაციაა pool.append(pool.pop(0)), თუმცა წინიდან წაშლა სიის დარჩენილ ელემენტებს ცვლის.

იტერატორს განზრახ მოკრძალებული ამოცანა აქვს. ის არ ამოწმებს ხელმისაწვდომობას, არ შლის წარუმატებელ ჩანაწერებს და არ იძლევა სხვა საჯარო გასასვლელის გარანტიას. რამდენიმე ბოლო წერტილს შეუძლია ერთი გარე მისამართი გაიზიაროს.

შეინახეთ ხელახალი ცდის პოლიტიკა და პულის განახლებები ამ პატარა ამომრჩევის გარეთ. საერთო იტერატორს ასევე სჭირდება განზრახ საკუთრების მოდელი პარალელურ კოდში, რათა არჩეული ბოლო წერტილი დარჩეს იმ ოპერაციაზე მიბმული, რომელმაც ის მიიღო.

დაკავშირებული სტატიები