如何进行酸洗,以防止碰撞?

时间:2018-06-12 16:53:04

标签: python pickle

我经常使用pickle.dump()来保存Python 2.7中的大文件。在我的代码中,我有一个.pickle文件,我不断更新代码的每次迭代,每次都覆盖相同的文件。

但是,我偶尔会遇到崩溃(例如来自服务器问题)。这可能发生在pickle转储的中间,导致pickle不完整,pickle文件不可读,并且我丢失了过去迭代中的所有数据。

我想我能做到的一种方法是为每次迭代保存一个.pickle文件,并在以后合并所有这些文件。是否有任何其他推荐的方法或写入磁盘的最佳实践,这些方法对崩溃很有效?

2 个答案:

答案 0 :(得分:0)

您有效地进行备份,因为您的目标是相同的:灾难恢复,尽可能少地丢失工作。

在备份中,有这些标准做法,因此请选择最适合您的方法:

  • 备份
    • 完整备份(每次保存所有内容)
    • 增量备份(仅保存自上次备份以来更改的内容)
    • 差异备份(仅保存自上次完整备份后更改的内容)
  • 处理旧备份
    • 循环缓冲区/旋转副本(删除或覆盖超过X天/迭代的备份,可选择更改其他名称中的索引)
    • 将旧的增量/差异副本整合到前面的完整备份中(作为故障保护,合并到新文件中,然后只删除旧文件)

答案 1 :(得分:0)

  

是否有任何其他推荐方法,或最佳做法

让我提一下很酷的Mike McKearn的 dill 套餐

import dill as pickle

pickle.dump_session( aRotatingIndexFileNAME ) # saves python session-state
#                                             # session is worth
#                                             # many computing [CPU-core * hrs]

如果需要,只需

import dill as pickle; pickle.load_session( aLastSessionStateFileNAME )

使用旋转文件名是一种常见的最佳实践,可以存档一些深度的回滚功能,因此值得在此重复。

dill 确实拯救了我,包括故意使用相同的调用签名,以便轻松替换为python项目。