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