内存泄漏pandas DataFrames的unpickle dict

时间:2017-11-03 12:21:32

标签: python-2.7 pandas numpy pickle

当我挑选一个数据帧字典然后再次取消它们时,我会遇到一种内存泄漏。取消引用unpickled变量后,内存仅部分释放。致电gc.collect()无济于事。我创建了以下最小例子:

import pickle
import numpy as np
import pandas as pd
new =  np.zeros((1000, 100))
new = pd.DataFrame(new)
cc = {ix: new.copy() for ix in range(500)}
pickle.dump(cc, open('/tmp/test21', 'wb'))

现在我打开一个干净的python会话并执行

import pickle
# memory consumption is around 40MB
data = pickle.load(open('/tmp/test21'))
# memory consumption goes to 991MB
data = None
# memory consumption goes to 776MB

这是pandas 0.19.2和python 2.7.13。问题似乎是泡菜,字典和熊猫之间的相互作用。如果我删除行new = pd.DataFrame(new),则不会出现问题。如果我只是在没有字典的情况下制作大型df,则不会出现问题。如果我没有挑选字典并设置cc = None,则问题不会发生。我还用pandas 0.14.1和python 2.7.13测试了这个问题。最后问题出现在pickle和cPickle上。

进一步分析这个可能是什么原因或策略?任何帮助深表感谢!

0 个答案:

没有答案