Можно ли установить максимальное количество повторных попыток, совместно используемых всеми подключениями к пулу в одном сеансе?

В настоящее время я делаю следующее для установки максимального количества повторных попыток подключения для моего grequest обертка:

self._s = Session()
retries = Retry(total=5, status_forcelist=[500, 502, 503, 504])
self._s.mount('http://, HTTPAdapter(max_retries=retries))

Затем я создаю кучу grequest объекты с сеансом self._s в качестве одного из аргументов. Например, создание набора GET запросы будут выполняться с использованием чего-то вроде этого:

requests = [grequests.get(url, ..., 'session': self._s')]

Наконец, все они в конечном итоге выпущены с использованием grequests.map(requests, ...),

Проблема в том, что я хочу, чтобы максимальное количество повторных попыток сохранялось и было общим для всех подключений пула соединений. Повторные попытки все еще, кажется, применяются только на основе отдельного соединения. Есть ли возможный способ сделать это? Разве это не возможно, так как новый Retry() объекты кажутся созданными при каждом уменьшении от общего количества вызовов?

1 ответ

Я думаю, что вам не повезло. Retry Докстрин говорит (отрывок):

Каждая попытка повторной попытки создаст новый объект Retry с обновленными значениями, чтобы их можно было безопасно использовать повторно.

Таким образом, создается новый объект, как вы сказали, каждое соединение... и это делается по замыслу.

Кроме того, Retry Сам объект - это то, что позволяет создавать потоки: он спит между попытками подключения. Так что Retry объект должен быть связан с одним потоком, этим дизайном. Сожалею. Вот ссылка на urllib.utils.retry на случай, если это поможет.

Другие вопросы по тегам