การเลือกพร็อกซีแบบ round-robin ใน Python ด้วย itertools.cycle
ใช้อิเทอเรเตอร์ที่วนซ้ำเพื่อเลือกพร็อกซีที่คาดเดาได้จากพูลคงที่ โดยแยกการเลือกออกจากการรันคำขอและจากสุขภาพ
สำหรับพูลคงที่ การเลือกแบบ 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)) แม้ว่าการลบจากด้านหน้าจะเลื่อนรายการที่เหลือ
อิเทอเรเตอร์มีหน้าที่จำกัดโดยเจตนา มันไม่ตรวจสอบความพร้อมใช้งาน ไม่ลบรายการที่ล้มเหลว และไม่รับประกันทางออกสาธารณะที่ต่างออกไป ปลายทางหลายจุดอาจใช้ที่อยู่ภายนอกเดียวกัน
เก็บนโยบายการลองใหม่และการอัปเดตพูลไว้นอกตัวเลือกเล็ก ๆ นี้ อิเทอเรเตอร์ที่ใช้ร่วมกันยังต้องมีแบบจำลองความเป็นเจ้าของอย่างตั้งใจในโค้ดที่ทำงานพร้อมกัน เพื่อให้ปลายทางที่เลือกยังผูกอยู่กับการดำเนินการที่รับมันไป