У меня есть скрипт, который работает 24/7 и иногда убивается перезагрузкой системы.Одна часть сценариев собирает ячейки из pastebin [.] Com с определенным содержимым, а другая экспортирует их в удаленную конечную точку отдыха.Часть, где я собираю мусорные ведра, отправляет много запросов и никогда не сталкивается с проблемами с HTTPConnectionPool
, в то время как другая часть имеет тенденцию сталкиваться с ней довольно быстро, несмотря на то, что она отправляет запрос гораздо реже.
У меня следующий код с повторной логикой, поэтому я гарантирую, что корзина будет экспортирована в удаленный
def send_export_request(self, payload):
while True:
success = False
try:
self.session.post(self.collector, data=payload, timeout=10)
success = True
except requests.exceptions.RequestException as e:
self.logger.log_error("RequestException ocurred when storing paste %s: %s" % (payload['key'], e))
if success:
break
self.logger.log("Retrying to store the paste...")
self.session.close()
self.session = requests.session()
sleep(2)
Конечно, self.session
инициализируется в конструкторе в requests.session()
.В конечном итоге всегда происходит (количество времени отличается от случая к случаю, но это всегда случается не более 24 часов): возникает следующее исключение:
HTTPConnectionPool(host='www.[redacted].com', port=80): Read timed out. (read timeout=10)
И код идетв цикл, всегда вызывая это исключение, регистрируя его, ожидая 2 секунды, повторяя попытку, вызывая исключение и так далее, и так далее.Он никогда не восстановится, если я не убью скрипт и не запустлю его снова.Я много искал, первоначально пробовал код без сеанса (просто отправлять запросы), затем добавил сеанс и, наконец, попытался создать новый сеанс перед повторной попыткой.Ничего из этого не работает.Чего мне не хватает?