עבור מאגר קבוע, בחירת 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)), אך הסרה מהחזית מזיזה את שאר פריטי הרשימה.

לאיטרטור יש תפקיד צנוע במכוון. הוא אינו בודק זמינות, אינו מסיר רשומות שנכשלו ואינו מבטיח יציאה ציבורית אחרת. כמה נקודות קצה יכולות לחלוק כתובת חיצונית אחת.

השאירו את מדיניות הניסיונות החוזרים ואת עדכוני המאגר מחוץ לבורר הקטן הזה. איטרטור משותף זקוק גם למודל בעלות מכוון בקוד מקבילי, כדי שנקודת הקצה שנבחרה תישאר קשורה לפעולה שקיבלה אותה.

מאמרים קשורים