Прокси B, снова прокси B, затем прокси A. Ваш журнал выглядит подозрительно, но случайный выборщик имеет право делать именно это.

Выбор из одного и того же списка при каждом запросе допускает повторы. При двух равновероятных конечных точках у следующего независимого выбора есть шанс один из двух совпасть с предыдущим. Короткая последовательность с повторами не доказывает, что выборщик проигнорировал список.

Выберите поведение, которое вам действительно нужно

ТребованиеПравило выбора
Каждый выбор независимКаждый раз выбирайте из подходящего списка
Используйте каждую конечную точку один раз, прежде чем начать зановоПеремешайте копию, израсходуйте её, затем начните новый проход
Избегайте непосредственно предыдущей конечной точкиИсключите эту конечную точку перед выбором

Для последней политики явно обработайте случай с одной конечной точкой:

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

Этот фрагмент предполагает, что random импортирован, а список конечных точек уже проверен. Публичный пул может начать с бесплатного списка прокси, когда его протоколы подходят конечному клиенту; это правило выбора по-прежнему управляет повторами. Ждать, повторно использовать единственную конечную точку или остановиться — это политика приложения. Бесконечный цикл в ожидании другого случайного значения не может решить список, содержащий только один отличный вариант.

В параллельном диспетчере выбор и запись предыдущей конечной точки также требуют согласованного владения. Иначе два работника могут оба исключить старое значение и выбрать одно и то же следующее значение.

Наконец, это правило касается идентичности конечной точки. Две разные конечные точки могут вести к одному публичному выходу, а одна конечная точка провайдера может вести к нескольким выходам. Записывайте их отдельно, прежде чем решить, что ротация сломана.

Похожие статьи