我在服务器上运行了几个脚本,这些脚本可以 pickle 和解开各种词典。它们都使用相同的基本 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()

除了其中一个脚本外,所有脚本都可以正常运行。遇到问题的网站会去各种网站,抓取数据并将其存储在字典中。该代码全天运行 pickle 和 pickle 字典,并在午夜停止。然后进行一次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,这再也不是问题。

感谢您的所有评论和帮助。

10-07 16:14
查看更多