我有几个脚本在服务器上运行,用于腌制和取消腌制各种字典。它们都使用相同的基本代码进行酸洗,如下所示:
SellerDict=open('/home/hostadl/SellerDictkm','rb')
SellerDictionarykm=pickle.load(SellerDict)
SellerDict.close()
SellerDict=open('/home/hostadl/SellerDictkm','wb')
pickle.dump(SellerDictionarykm,SellerDict)
SellerDict.close()
除其中一个脚本外,所有脚本都运行良好。有问题的人会去各个网站并抓取数据并将其存储在字典中。该代码整天运行 pickling 和 unpickling 字典,并在午夜停止。然后 cronjob 再次启动它
第二天早上。该脚本可以运行数周而不会出现问题,但大约每月一次,该脚本在尝试打开字典时会因 EOFError 而终止。字典的大小通常约为 80 MB。我什至尝试在腌制数据时在 SellerDict.close() 之前添加 SellerDict.flush() 以确保晚上被刷新。
知道是什么原因造成的吗? Python 非常稳定,所以我认为这不是由于文件的大小造成的。如果代码在死之前运行良好很长时间,它会让我相信字典中可能保存了一些导致此问题的内容,但我不知道。
另外,如果你知道除了 pickle 之外还有更好的保存字典的方法,我愿意接受其他选择。正如我之前所说,字典不断地被打开和关闭。澄清一下,只有一个程序会使用相同的字典,因此问题不是由多个程序尝试访问相同的字典引起的。
UPDATE:
这是我从日志文件中获得的回溯。
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