Следующий код заполняет всю мою память:Это утечка памяти? (Питон + NumPy)
from sys import getsizeof
import numpy
# from http://stackoverflow.com/a/2117379/272471
def getSize(array):
return getsizeof(array) + len(array) * getsizeof(array[0])
class test():
def __init__(self):
pass
def t(self):
temp = numpy.zeros([200,100,100])
A = numpy.zeros([200], dtype = numpy.float64)
for i in range(200):
A[i] = numpy.sum(temp[i].diagonal())
return A
a = test()
memory_usage("before")
c = [a.t() for i in range(100)]
del a
memory_usage("After")
print("Size of c:", float(getSize(c))/1000.0)
Выход есть:
('>', 'before', 'memory:', 20588, 'KiB ')
('>', 'After', 'memory:', 1583456, 'KiB ')
('Size of c:', 8.92)
Почему я использую ~ 1,5 Гб памяти, если с ~ 9 KiB? Это утечка памяти? (Спасибо)
memory_usage
функция была размещена на SO и сообщается здесь для ясности:
def memory_usage(text = ''):
"""Memory usage of the current process in kilobytes."""
status = None
result = {'peak': 0, 'rss': 0}
try:
# This will only work on systems with a /proc file system
# (like Linux).
status = open('/proc/self/status')
for line in status:
parts = line.split()
key = parts[0][2:-1].lower()
if key in result:
result[key] = int(parts[1])
finally:
if status is not None:
status.close()
print('>', text, 'memory:', result['rss'], 'KiB ')
return result['rss']
Замените 'float (getsizeof (c))/1000.0)' с 'float (getSize (c))/1000.0), и вы должны получить лучшее значение. – glglgl
Спасибо glglgl, я на самом деле скопировал неправильную версию моего образца кода. Исправленный. – Pie86
Что произойдет, если вы добавите del temp непосредственно перед оператором return в t()? – reptilicus