Разделы · Код и программные интерфейсы
Пишу свой сборщик, и на этом месте встал.
Расклад такой.
Результаты пишу пачками по тысяче строк. Повторы стоят три раза с паузой, которая растёт вдвое.
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)
Как считаете вы? Интересует порядок, а не общие слова.
Разбейте прогон на части, станет ровнее.
Согласен с предыдущим ответом, но с одной оговоркой.
Адрес выбирайте по кругу с пропуском тех, что в отказе. Случайный выбор даёт перекос, кому-то достанется втрое больше запросов.
Состояние прогона храните построчно, а не одним куском в конце. Тогда обрыв на девяностом проценте не стоит вам всего прогона.
Проверял на трёх проектах подряд, картина устойчивая.
Логируйте код ответа, время и адрес. Три поля, и почти любой разбор потом занимает минуты.
Повторы делайте с растущей паузой: первая через две секунды, вторая через четыре, третья через восемь. Три попытки достаточно, дальше проблема не в связи.
Был случай, когда всё сошлось только на третий день разбора.
Повторы делайте с растущей паузой: первая через две секунды, вторая через четыре, третья через восемь. Три попытки достаточно, дальше проблема не в связи.
Если поможет, напишите здесь же, пригодится следующим.
Считайте по темпу, всё остальное вторично.
Считайте по темпу, всё остальное вторично.
Начинал с того же, потом переделал.
Повторы делайте с растущей паузой: первая через две секунды, вторая через четыре, третья через восемь. Три попытки достаточно, дальше проблема не в связи.
Начните с малого объёма и растите постепенно.
Начинал с того же, потом переделал.
Повторы делайте с растущей паузой: первая через две секунды, вторая через четыре, третья через восемь. Три попытки достаточно, дальше проблема не в связи.
Адрес выбирайте по кругу с пропуском тех, что в отказе. Случайный выбор даёт перекос, кому-то достанется втрое больше запросов.
Начинал с того же, потом переделал.
Повторы делайте с растущей паузой: первая через две секунды, вторая через четыре, третья через восемь. Три попытки достаточно, дальше проблема не в связи.
Число одновременных задач подбирайте замером, а не на глаз. Обычно кривая выходит на полку, и дальше растёт только число отказов.
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)На другой машине воспроизводится?
А что показывают логи в момент падения?