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