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