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