Сохранить деку в текстовом файле

1

Я пишу искателя в Python, чтобы Ctrl + C не приводил к запуску моего искателя в следующем запуске, мне нужно сохранить обработчик deque в текстовом файле (по одному элементу в строке) и обновить его каждая итерация, операция обновления должна быть очень быстрой. Чтобы не изобретать колесо, я спрашиваю, есть ли установленный модуль для этого?

Теги:
web-crawler

4 ответа

4
Лучший ответ

В качестве альтернативы вы можете настроить функцию выхода и рассортировать deque при выходе.

Функция выхода
Pickle

1

Я не уверен, правильно ли понял вопрос, мне просто интересно, так что вот несколько вопросов и предложений:

Планируете ли вы поймать прерывание Ctrl + C и сделать deque? Что произойдет, если искатель сбой по какой-либо причине, например, необработанное исключение или сбой? Вы теряете статус очереди и начинаете заново? из документации:

Примечание

Функция выхода не вызывается, когда программа убивается сигналом, когда возникает внутренняя ошибка Python обнаружено, или когда os._exit() является называется.

Что произойдет, если вы снова посетите один и тот же URI, поддерживаете ли вы посещаемый список или что-то еще?

Я думаю, что вы должны поддерживать какую-то информацию о посещении и сеансе/статус для каждого просматриваемого вами URI. Вы можете использовать информацию о посещении, чтобы решить обходить URI или нет, когда вы посещаете тот же URI в следующий раз. Другая информация - информация о сеансе - для последнего сеанса с этим URI поможет в сборе только инкрементного материала, и если страница не изменяется, не нужно ее поднимать, экономя некоторые затраты на ввод-вывод, дубликаты и т.д.

Таким образом вам не придется беспокоиться о ctrl + C или сбое. Если искатель спускается по какой-либо причине, скажем, после сканирования 60K сообщений, когда осталось еще 40K, в следующий раз, когда искатель заполняет очередь, хотя очередь может быть огромной, но искатель может проверить, не посетил ли он URI или не и каково было состояние страницы при ее обходе - оптимизация - требуется ли страница для новой записи, которую она изменила или нет.

Надеюсь, это поможет.

  • 0
    Как я уже проверял, зарегистрированную функцию atexit вызывают как в случаях CTRL + C, так и в необработанных исключениях, и я выяснил, что посещенный набор также необходимо выбрать для восстановления состояния программы. Ваш совет полезен, большое спасибо.
1

Вы можете использовать pickle для сериализации ваших списков.

0

Некоторые вещи, которые приходят мне на ум:

  • оставьте дескриптор файла открытым (не закрывайте файл каждый раз, когда вы что-то написали)
  • или напишите файл каждые n элементов и поймайте сигнал закрытия для записи текущих неписаных элементов

Ещё вопросы

Сообщество Overcoder
Наверх
Меню