Chọn proxy round-robin trong Python với itertools.cycle
Dùng một iterator lặp lại để chọn proxy có thể dự đoán từ một nhóm cố định, đồng thời tách việc chọn khỏi việc thực thi yêu cầu và khỏi tình trạng sức khỏe.
Với một nhóm cố định, việc chọn round-robin có thể ngắn gọn một cách dễ chịu:
from itertools import cycle
choices = cycle([
"http://proxy-a.example:8080",
"http://proxy-b.example:8080",
"http://proxy-c.example:8080",
])
endpoint = next(choices)
Thay các URL mẫu bằng điểm cuối HTTP từ dịch vụ của bạn hoặc từ danh sách proxy HTTP. Các lần gọi liên tiếp trả về A, B, C rồi lại A. Dùng giá trị đã chọn khi cấu hình yêu cầu tiếp theo. Tạo lại iterator cho mỗi yêu cầu sẽ khởi động lại trình tự. Với Requests, hãy truyền điểm cuối đã chọn vào yêu cầu.
Nếu bạn thích danh sách hơn, hãy chuyển phần tử đầu tiên của nó xuống cuối. pool.append(pool.pop()) loại bỏ phần tử cuối rồi đặt lại ngay; phần tử đầu tiên không bao giờ thay đổi. Thao tác hàng đợi là pool.append(pool.pop(0)), dù việc loại bỏ ở đầu sẽ dịch chuyển các phần tử còn lại của danh sách.
Iterator có nhiệm vụ cố ý khiêm tốn. Nó không kiểm tra khả dụng, không loại bỏ các mục thất bại và không bảo đảm một lối ra công khai khác. Nhiều điểm cuối có thể dùng chung một địa chỉ bên ngoài.
Giữ chính sách thử lại và các cập nhật nhóm bên ngoài bộ chọn nhỏ này. Một iterator dùng chung cũng cần mô hình sở hữu có chủ đích trong mã đồng thời để điểm cuối được chọn vẫn gắn với thao tác đã nhận nó.