如何执行酸洗以防止崩溃?
How to perform a pickling so that it is robust against crashing?
我经常使用 pickle.dump()
在 Python 2.7 中保存大文件。在我的代码中,我有一个 .pickle
文件,我会随着代码的每次迭代不断更新,每次都会覆盖同一个文件。
但是,我偶尔会遇到崩溃(例如服务器问题)。这可能发生在 pickle 转储的中间,导致 pickle 不完整并且 pickle 文件不可读,并且我丢失了过去迭代的所有数据。
我想我可以做到的一种方法是为每次迭代保存一个 .pickle
文件,然后将它们全部合并。是否有任何其他推荐的方法,或写入磁盘的最佳实践,以防止崩溃?
您正在有效地进行备份,因为您的目标是相同的:灾难恢复,尽可能少地丢失工作。
在备份中,有这些标准做法,因此请选择最适合您的做法:
- 正在备份
- 完整备份(每次都保存所有内容)
- 增量备份(仅保存自上次备份以来更改的内容)
- 差异备份(仅保存自上次 完整 备份以来更改的内容)
- 处理旧备份
- 循环 buffer/rotating 副本(删除或覆盖早于 X days/iterations 的备份,可选择更改其他名称中的索引)
- 将旧的 incremental/differential 副本合并到之前的完整备份中(作为故障保险,合并到一个新文件中,然后才删除旧的)
Are there any other recommended methods, or best practices ?
让我提一下很酷的 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 项目中。
我经常使用 pickle.dump()
在 Python 2.7 中保存大文件。在我的代码中,我有一个 .pickle
文件,我会随着代码的每次迭代不断更新,每次都会覆盖同一个文件。
但是,我偶尔会遇到崩溃(例如服务器问题)。这可能发生在 pickle 转储的中间,导致 pickle 不完整并且 pickle 文件不可读,并且我丢失了过去迭代的所有数据。
我想我可以做到的一种方法是为每次迭代保存一个 .pickle
文件,然后将它们全部合并。是否有任何其他推荐的方法,或写入磁盘的最佳实践,以防止崩溃?
您正在有效地进行备份,因为您的目标是相同的:灾难恢复,尽可能少地丢失工作。
在备份中,有这些标准做法,因此请选择最适合您的做法:
- 正在备份
- 完整备份(每次都保存所有内容)
- 增量备份(仅保存自上次备份以来更改的内容)
- 差异备份(仅保存自上次 完整 备份以来更改的内容)
- 处理旧备份
- 循环 buffer/rotating 副本(删除或覆盖早于 X days/iterations 的备份,可选择更改其他名称中的索引)
- 将旧的 incremental/differential 副本合并到之前的完整备份中(作为故障保险,合并到一个新文件中,然后才删除旧的)
Are there any other recommended methods, or best practices ?
让我提一下很酷的 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 项目中。