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

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

10.12.2008 11:23:19
4 ОТВЕТА
РЕШЕНИЕ

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

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

4
10.12.2008 11:29:20

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

2
10.12.2008 11:30:32

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

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

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

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

Запись

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

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

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

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

Я надеюсь, что это поможет.

1
10.12.2008 13:13:45
Как я уже проверял, зарегистрированную функцию atexit вызывают как в случаях CTRL + C, так и в необработанных исключениях, и я выяснил, что посещенный набор также необходимо выбрать для восстановления состояния программы. Ваш совет полезен, большое спасибо.
btw0 10.12.2008 17:59:31