Python 以表格格式使用hdf时内存泄漏?

Python 以表格格式使用hdf时内存泄漏?,python,pandas,pytables,Python,Pandas,Pytables,在pandas下,每次我使用表格格式而不是固定格式时,我的内存消耗就会激增 import numpy as np np.random.seed(seed=10) df = pd.DataFrame ({'ID' : ['foo', 'bar'] * 10000000, 'ORDER' : np.arange(20000000), 'VAL' : np.random.randn(20000000)}) 案例1:固定格式 现在,我读了十次df,我的

在pandas下,每次我使用表格格式而不是固定格式时,我的内存消耗就会激增

import numpy as np
np.random.seed(seed=10)
df = pd.DataFrame ({'ID' : ['foo', 'bar'] * 10000000,
                'ORDER' : np.arange(20000000),
         'VAL' : np.random.randn(20000000)})
案例1:固定格式 现在,我读了十次df,我的工作没有高内存消耗

for a in range(10):
    df1 = pd.read_hdf('test.h5','df')
案例2:表格格式 现在,我读了十次df,它不会每次都释放内存。内存消耗越来越高

for a in range(10):
    df1 = pd.read_hdf('test.h5','df')
有什么建议吗


windows 64位python 3.4,0.15.1,使用较小的文件n=1MM

他们的表格格式分配了大约2倍的内存,然后收集。这主要是存储格式的功能

In [12]: %mprun -f f f()
Filename: test.py

Line #    Mem usage    Increment   Line Contents
================================================
     5    115.1 MiB      0.0 MiB   def f():
     6    125.8 MiB     10.7 MiB       pd.read_hdf('test.h5','df')
     7    125.8 MiB      0.0 MiB       gc.collect()
('',)

In [13]: %mprun -f f2 f2()
Filename: test.py

Line #    Mem usage    Increment   Line Contents
================================================
     9    125.8 MiB      0.0 MiB   def f2():
    10    228.5 MiB    102.7 MiB       pd.read_hdf('test2.h5','df')
    11    115.0 MiB   -113.5 MiB       gc.collect()

您需要使用gc.collect()。创建表会创建更多需要收集的对象。它们最终会被收集起来,但是如果你真的在做这种循环(这通常不是一个好主意,这是选择语法的要点),你可能需要更快地强制它。循环只是指向内存消耗的增加。
for a in range(10):
    df1 = pd.read_hdf('test.h5','df')
In [12]: %mprun -f f f()
Filename: test.py

Line #    Mem usage    Increment   Line Contents
================================================
     5    115.1 MiB      0.0 MiB   def f():
     6    125.8 MiB     10.7 MiB       pd.read_hdf('test.h5','df')
     7    125.8 MiB      0.0 MiB       gc.collect()
('',)

In [13]: %mprun -f f2 f2()
Filename: test.py

Line #    Mem usage    Increment   Line Contents
================================================
     9    125.8 MiB      0.0 MiB   def f2():
    10    228.5 MiB    102.7 MiB       pd.read_hdf('test2.h5','df')
    11    115.0 MiB   -113.5 MiB       gc.collect()