【问题标题】:Object Persistence in Python with many files openPython中的对象持久性,打开了许多文件
【发布时间】:2014-08-22 18:42:29
【问题描述】:

我正在尝试使用 pickle 保存程序的状态,以便我可以使用在不同运行中创建的对象跳转到不同的状态。

问题在于,几乎所有这些对象(有不少)都有记录器对象,所以它们都在修改文件,这很麻烦。

有什么方法可以关闭所有当前打开的文件,这样我就可以腌制它们了吗?

【问题讨论】:

  • 当你 unpickle 以“跳转”到一个状态时,你期望或希望记录器处于什么状态?
  • 如果您的问题是记录器实例不使用pickle 序列化...也许您可以使用更好的pickler?我知道dillpickler 可以序列化记录器实例。

标签: python pickle object-persistence


【解决方案1】:

您可以通过包含 __getstate__ 方法来限制腌制的内容:

def __getstate__(self):
    state = vars(self).copy()
    del state['logger']  # remove logger object
    return state

在这种情况下,您可能还需要包含 __setstate__ 以重新创建记录器对象。

【讨论】:

  • 一切准备就绪都试过了。问题是记录器也隐含在许多对象中。
  • @HX:它不能隐式出现;它可能存在于其他属性中,例如列表或字典。您的应用程序代码仍然可以在实例上不引用它们或生成不包含它们的状态。
猜你喜欢
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 2011-12-25
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
相关资源
最近更新 更多