Python pickle 字典 EOFError

标签 python dictionary pickle eoferror

我有几个脚本在服务器上运行,可以对各种词典进行 pickle 和 unpickle。它们都使用相同的基本代码进行 pickle ,如下所示:

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。我什至尝试在 pickle 数据时在 SellerDict.close() 之前添加 SellerDict.flush() 以确保晚上被刷新。

知道是什么原因造成的吗? Python 非常可靠,所以我不认为这是因为文件的大小。代码在死之前运行了很长时间,这让我相信字典中可能保存了一些东西导致了这个问题,但我不知道。

此外,如果您知道比 pickle 更好的保存字典的方法,我愿意接受各种选择。就像我之前说的,词典不断地被打开和关闭。只是为了澄清,只有一个程序会使用同一个字典,所以问题不是由多个程序试图访问同一个字典引起的。

更新:

这是我从日志文件中得到的回溯。

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

最佳答案

所以这实际上是内存问题。当计算机用完 RAM 并尝试解压或加载数据时,进程将无法声明此 EOFError。我增加了计算机上的 RAM,这再也不是问题了。

感谢所有评论和帮助。

关于Python pickle 字典 EOFError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10263564/

相关文章:

python - 迭代列表时出错

python - 以范围为键的字典

Python-打开使用作业库创建的pickle文件时出错

python - 延长线与另一条线平滑连接

python - 基于数据框过滤数据透视表

python - 如何定义没有 "TypeError: cannot determine truth value"的分段函数

python - 我怎样才能从字典中调用 __missing__

python - 无法在终端中使用 sort 命令对 txt 文件中的数据进行排序

python - 使用 pickle 保存模型

python - 使用 pickle 或 dill 保存类数据不起作用