Длинный цикл, который обходит тысячи страниц за один запуск, ломается ближе к концу — и всегда по-разному.
Проблема не в ошибке, а в конструкции. Один процесс держит в себе весь прогресс, и при падении этот прогресс исчезает. Перезапуск начинается сначала, а источник видит повторный обход тех же страниц.
Рабочая схема выглядит иначе. Есть список задач, каждая из которых мала и самостоятельна: одна страница, один раздел, один диапазон. Есть исполнитель, который берёт задачу, выполняет и отмечает результат. Есть правило повтора для тех задач, что не удались.
Что это даёт:
— падение стоит одну задачу, а не весь запуск;
— повтор безопасен, если задача идемпотентна, то есть повторное выполнение не создаёт дубль;
— скорость регулируется числом исполнителей, а не переписыванием кода;
— видно, где именно застряло: задачи с большим числом попыток сами всплывают наверх.
Отдельно про повторы. Их число должно быть ограничено, а пауза между ними расти. Бесконечный повтор одной сломанной задачи выглядит со стороны сайта хуже любого жадного обхода.
Парсеры и Скрейперы
@parsers_mkt_n1k_n1k
Длинный цикл, который обходит тысячи страниц за один запуск, ломается ближе к концу — и всегда по-разному.
Этот пост опубликован в Telegram-канале Парсеры и Скрейперы. Подписаться можно по ссылке: @parsers_mkt_n1k_n1k.