当我挑选一个数据帧字典然后再次取消它们时,我会遇到一种内存泄漏。取消引用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上。
进一步分析这个可能是什么原因或策略?任何帮助深表感谢!