У меня есть несколько скриптов, работающих на сервере, которые собирают и распаковывают различные словари. Все они используют один и тот же базовый код для травления, как показано ниже:
SellerDict=open('/home/hostadl/SellerDictkm','rb')
SellerDictionarykm=pickle.load(SellerDict)
SellerDict.close()
SellerDict=open('/home/hostadl/SellerDictkm','wb')
pickle.dump(SellerDictionarykm,SellerDict)
SellerDict.close()
Все скрипты работают нормально, кроме одного. Тот, у кого есть проблемы, посещает различные веб-сайты, собирает данные и сохраняет их в словаре. Этот код работает весь день, собирая и распаковывая словари, и останавливается в полночь. Затем cronjob запускает его снова на следующее утро. Этот скрипт может работать неделями без проблем, но примерно раз в месяц скрипт умирает из-за ошибки EOFError при попытке открыть словарь. Размер словарей обычно составляет около 80 МБ. Я даже пытался добавить SellerDict.flush() перед SellerDict.close() при обработке данных, чтобы убедиться, что вечер сбрасывается.
Любая идея, что может быть причиной этого? Python довольно надежен, поэтому я не думаю, что это связано с размером файла. Там, где код работает нормально в течение длительного времени, прежде чем умереть, это наводит меня на мысль, что, возможно, что-то сохраняется в словаре, что вызывает эту проблему, но я понятия не имею.
Кроме того, если вы знаете лучший способ сохранения словарей, кроме рассола, я открыт для вариантов. Как я уже говорил ранее, словари постоянно открываются и закрываются. Просто для пояснения: только одна программа будет использовать один и тот же словарь, поэтому проблема не вызвана тем, что несколько программ пытаются получить доступ к одному и тому же словарю.
ОБНОВИТЬ:
Вот трассировка, которую я получил из файла журнала.
Traceback (most recent call last):
File "/home/hostadl/CompileRecentPosts.py", line 782, in <module>
main()
File "/home/hostadl/CompileRecentPosts.py", line 585, in main
SellerDictionarykm=pickle.load(SellerDict)
EOFError