问题描述:
我正在处理我正在编写的一段代码的性能问题,并且我注意到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
,并了解其原因,以便我可以更好地调试我目前遇到的性能问题。