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