สำหรับพูลคงที่ การเลือกแบบ 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)) แม้ว่าการลบจากด้านหน้าจะเลื่อนรายการที่เหลือ

อิเทอเรเตอร์มีหน้าที่จำกัดโดยเจตนา มันไม่ตรวจสอบความพร้อมใช้งาน ไม่ลบรายการที่ล้มเหลว และไม่รับประกันทางออกสาธารณะที่ต่างออกไป ปลายทางหลายจุดอาจใช้ที่อยู่ภายนอกเดียวกัน

เก็บนโยบายการลองใหม่และการอัปเดตพูลไว้นอกตัวเลือกเล็ก ๆ นี้ อิเทอเรเตอร์ที่ใช้ร่วมกันยังต้องมีแบบจำลองความเป็นเจ้าของอย่างตั้งใจในโค้ดที่ทำงานพร้อมกัน เพื่อให้ปลายทางที่เลือกยังผูกอยู่กับการดำเนินการที่รับมันไป

บทความที่เกี่ยวข้อง