Я занимаюсь разработкой приложения, в котором мне нужно временно обрабатывать разъединения на клиенте (сетевой интерфейс отключается).
Сначала я думал, что приведенный ниже подход будет работать, но иногда, если перезапустить сетевой интерфейс вызов s.get(url)
будет зависать бесконечно:
s = requests.Session()
s.mount('http://stackoverflow.com', HTTPAdapter(max_retries=Retry(total=10, connect=10, read=10)))
s.get(url)
Добавив аргумент ключевого слова timeout=10
к s.get(url)
, код теперь сможет обрабатывать такое поведение блокировки:
s = requests.Session()
s.mount('http://stackoverflow.com', HTTPAdapter(max_retries=Retry(total=10, connect=10, read=10)))
s.get(url, timeout=10)
Почему тайм-аут необходим для обработки случаев, когда сетевой интерфейс сбрасывается или временно отключается? Почему max_retries=Retry(total=10, connect=10, read=10)
не может справиться с этим? В частности, почему s.get()
не информируется о том, что сетевой интерфейс отключился, чтобы он мог повторить попытку соединения вместо зависания?