Разделы · Код и программные интерфейсы
Переписываю старый скрипт и хочу сделать правильно.
Что имеем на входе.
Состояние прогона храню в файле, чтобы продолжать после обрыва. Логирую код ответа, время и адрес, по которому шёл запрос.
async with aiohttp.ClientSession() as s:
for i in range(3):
try:
r = await s.get(url, proxy=adres, timeout=30)
break
except Exception:
await asyncio.sleep(2 ** i)
Как считаете вы? Интересует порядок, а не общие слова.
У меня картина совпадает почти полностью.
Повторы делайте с растущей паузой: первая через две секунды, вторая через четыре, третья через восемь. Три попытки достаточно, дальше проблема не в связи.
Начинал с того же, потом переделал.
Повторы делайте с растущей паузой: первая через две секунды, вторая через четыре, третья через восемь. Три попытки достаточно, дальше проблема не в связи.
Полгода назад ловил то же самое.
Повторы делайте с растущей паузой: первая через две секунды, вторая через четыре, третья через восемь. Три попытки достаточно, дальше проблема не в связи.
Добавлю про источник. Раньше брал дешёвый общий пул, где адреса шли подряд одним диапазоном, и половина прогонов заканчивалась проверкой на робота. Перешёл на серверные адреса IPv4, и вопрос закрылся сам.
Осторожнее с этим выводом, он верен не всегда.
Разбор ответа держите отдельно от сбора. Тогда смена разметки не требует перегонять данные заново, достаточно перечитать сохранённое.
Состояние прогона храните построчно, а не одним куском в конце. Тогда обрыв на девяностом проценте не стоит вам всего прогона.