Proxy B, lại proxy B, rồi proxy A. Nhật ký của bạn trông đáng ngờ, nhưng bộ chọn ngẫu nhiên được phép làm đúng như vậy.

Chọn từ cùng một danh sách ở mỗi yêu cầu cho phép lặp lại. Với hai điểm cuối có xác suất như nhau, lựa chọn độc lập tiếp theo có một trong hai khả năng trùng với lần trước. Một chuỗi ngắn có lặp lại không chứng minh rằng bộ chọn đã bỏ qua danh sách.

Chọn hành vi bạn thực sự cần

Yêu cầuQuy tắc chọn
Mỗi lựa chọn độc lậpChọn từ danh sách đủ điều kiện mỗi lần
Dùng mỗi điểm cuối một lần trước khi bắt đầu lạiXáo trộn một bản sao, dùng hết, rồi bắt đầu lượt khác
Tránh điểm cuối ngay trước đóLoại trừ điểm cuối đó trước khi chọn

Với chính sách cuối cùng, hãy xử lý rõ ràng trường hợp chỉ có một điểm cuối:

candidates = [endpoint for endpoint in eligible if endpoint != previous]
if not candidates:
    raise RuntimeError("No different eligible proxy is available")
selected = random.choice(candidates)

Đoạn này giả định random đã được nhập và danh sách điểm cuối đã được xác thực. Một nhóm công khai có thể bắt đầu với danh sách proxy miễn phí khi các giao thức của nó phù hợp với máy khách cuối; quy tắc chọn này vẫn kiểm soát việc lặp lại. Việc chờ đợi, dùng lại điểm cuối duy nhất hay dừng lại là chính sách của ứng dụng. Một vòng lặp vô hạn chờ một giá trị ngẫu nhiên khác không thể giải quyết danh sách chỉ chứa một lựa chọn khác biệt.

Trong bộ điều phối đồng thời, việc chọn và ghi lại điểm cuối trước đó cũng cần quyền sở hữu phối hợp. Nếu không, hai worker có thể cùng loại trừ giá trị cũ và chọn cùng giá trị tiếp theo.

Cuối cùng, quy tắc này liên quan đến danh tính của điểm cuối. Hai điểm cuối khác nhau có thể dẫn đến một lối ra công khai, và một điểm cuối của nhà cung cấp có thể dẫn đến nhiều lối ra. Hãy ghi lại chúng riêng biệt trước khi kết luận rằng việc xoay vòng bị hỏng.

Bài viết liên quan