Панды: где здесь утечка памяти?
Я сталкиваюсь с проблемой утечек памяти, используяpandas
библиотека вpython, я создаюpandas.dataframe
объекты в моем классе и у меня есть метод, который изменяет размер информационного кадра в соответствии с моими условиями. После изменения размера фрейма данных и создания нового объекта pandas я переписываю оригинальный класс pandas.dataframe в своем классе. Но использование памяти очень велико даже после значительного сокращения исходной таблицы. Некоторый код для краткого примера (я не писал менеджер процессов, см. Диспетчер задач):
import time, string, pandas, numpy, gc
class temp_class ():
def __init__(self, nrow = 1000000, ncol = 4, timetest = 5):
self.nrow = nrow
self.ncol = ncol
self.timetest = timetest
def createDataFrame(self):
print('Check memory before dataframe creating')
time.sleep(self.timetest)
self.df = pandas.DataFrame(numpy.random.randn(self.nrow, self.ncol),
index = numpy.random.randn(self.nrow), columns = list(string.letters[0:self.ncol]))
print('Check memory after dataFrame creating')
time.sleep(self.timetest)
def changeSize(self, from_ = 0, to_ = 100):
df_new = self.df[from_:to_].copy()
print('Check memory after changing size')
time.sleep(self.timetest)
print('Check memory after deleting initial pandas object')
del self.df
time.sleep(self.timetest)
print('Check memory after deleting copy of reduced pandas object')
del df_new
gc.collect()
time.sleep(self.timetest)
if __name__== '__main__':
a = temp_class()
a.createDataFrame()
a.changeSize()
Before dataframe creating I have approx. 15 mb of memory usage
After creating - 67mb
After changing size - 67 mb
After deleting original dataframe - 35mb
After deleting reduced table - 31 mb.
16 mb?
Я использую Python 2.7.2 (x32) на машине Windows 7 (x64), панды.version составляет 0,7,3. NumPy.version это 1.6.1