Можно ли установить максимальное количество повторных попыток, совместно используемых всеми подключениями к пулу в одном сеансе?
В настоящее время я делаю следующее для установки максимального количества повторных попыток подключения для моего 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
на случай, если это поможет.