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