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