【问题标题】:EC2 python pickle failsEC2 python泡菜失败
【发布时间】:2014-05-28 22:00:31
【问题描述】:

我正在使用 python 在 EC2 上进行计算,当我尝试转储包含字典的 pickle 文件时,程序只是存在,没有错误通知或任何东西。该文件很大,大约 1 gig,但在我的笔记本电脑上一切正常,只是在 EC2 上不行。我正在使用带有大量空间的附加 EBS 卷的 m3.large 实例。在下面的代码 sn-p 中,它打印出“现在转储”,然后......什么都没有,没有“转储完成”。 'except' 没有发现任何错误。当我尝试加载 pickle 文件时,出现 EOF 错误。

感谢您的建议!

try:
    fp = open(pickleFile,"wb")
    print 'dumping now'
    pickle.dump(dataDict, fp)
    print 'dumping complete'
    fp.close()
except:
    fp = open('/Users/thisUser/Data/report.txt','w')
    fp.write('error writing pickle file')
    fp.close()

【问题讨论】:

  • 也许尝试转储(到字符串)。这可能会让您知道这是否是序列化问题。或者如果您担心需要额外的内存,您可以使用dill,并检查是否dill.pickles(dataDict)
  • 最好让我们知道您正在使用的 python 的版本号,以及您正在使用的任何其他模块,以及 dataDict 中的内容。

标签: python amazon-ec2 pickle


【解决方案1】:
  1. 特别是如果您正在调试文件 IO,请尽量不要让您的调试依赖于所述文件 IO。如果有任何权限或磁盘问题,您永远不会知道,因为错误消息也无法写入。

  2. 尝试运行watch "ls -lh /your/file",然后运行您的脚本,查看文件写入是否突然停止,或者只是以缓慢的速度继续。

  3. 如果您的脚本挂起并且您的 watch 看起来是静态的,请尝试使用 Ctrl-C,并检查您的函数在回溯中花费时间的位置。

  4. 尝试单独腌制字典的元素/键 - 腌制可能会在单个复杂元素上崩溃。

  5. 试试 cPickle

  6. 比较您在家里和在 ec2 上的版本:import cPickle; print cPickle.__version__

  7. 尝试不同的酸洗版本。

我不确定其中哪一个可能会有所帮助,但其中一个可能会有所帮助。

【讨论】:

  • 我同意您的 1-3,并且在大多数情况下同意您所说的其余部分,但有一个例外。 cPickle 不应该让你在pickle 失败的地方更进一步。是的,检查 dict 中的各个项目是否序列化,是的,尝试不同的版本(不太可能,但它可以工作)......但pickle/cPickle 应该在它可以腌制的对象上没有区别。另一个第三方序列化程序可能会让你走得更远,但如果它确实是来自dataDict 中传递的对象之一的序列化问题,我只会走那条路。
猜你喜欢
  • 2019-02-27
  • 1970-01-01
  • 2017-11-09
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 2016-01-02
相关资源
最近更新 更多