与内存中的大小相比,磁盘中具有非常不同大小的Pickle对象

时间:2017-12-04 21:05:40

标签: python python-3.x file file-io pickle

问题描述:

我正在处理我正在编写的一段代码的性能问题,并且我注意到pickle的一个非常奇怪的行为可能与它有关。

我正在使用dict将一个非常简单的pickle保存到磁盘,以便以后检索它。

这本词典是通过大量迭代创建的。它看起来像这样:

{'start_date': Timestamp('2007-09-07 05:42:00'),
 'timeFunction': <bound method Extremist.get_hour of <observer.extremist.Extremist object at 0x000001FADD41EC88>>,
 'timeReference': None, 'min': None, 'max': None}

保存的文件在磁盘上有5.863kb,这是非常荒谬的,因为它是一个非常简单的字典,当我加载它并使用sys.getsizeof()方法检查我加载的对象的大小pickle(在磁盘上有5.863kb)它显示了240(字节)的值,它与对象所拥有的数据量一致。

根据我的代码所做的迭代次数,pickle对象的大小似乎会增加。在经过大量迭代后,我看到其中一些pickle个对象超过10mb

保存字典的代码

try:
    os.remove('data/observer_states/' + obs_id + '.pkl')
except:
    pass

with open('data/observer_states/' + obs_id + '.pkl', 'wb') as f:
    pickle.dump(observer_state, f, pickle.HIGHEST_PROTOCOL)

尝试解决方案

我确实尝试使用os.remove()之前的pickle文件而不是覆盖它。这种方法不起作用,我不知道如何解决这个问题。

期望的结果

我希望将这个简单的dictionary保存到磁盘而不占用内存5.863kb,并了解其原因,以便我可以更好地调试我目前遇到的性能问题。

0 个答案:

没有答案