У меня возникла проблема с памятью в моем приложении при добавлении большого количества объектов в dict и удалении из dict.Но кажется, что Python не освобождает выделенную память.
Пожалуйста, посмотрите мой пример кода:
from memory_profiler import profile
from twisted.internet import reactor
class MyClass(object):
def __init__(self):
n = 10
self.my_array = [[[0 for k in xrange(n)] for j in xrange(n)] for i in xrange(n)]
class TestClass(object):
token_names = dict()
counter = 0
def add(self):
self.counter = self.counter + 1
self.token_names[str(self.counter)] = MyClass()
def testrun(self):
while True:
if self.counter > 1000:
self.remove()
break
self.add()
@profile
def remove(self):
print("Remove " + str(len(self.token_names)))
for k, v in self.token_names.items():
del self.token_names[k]
self.token_names.clear()
@profile
def start(self):
self.testrun()
def main():
test = TestClass()
test.start()
reactor.run()
if __name__ == '__main__':
raise SystemExit(main())
При выполнении этого теста память растет и не освобождает даже элементы dictудаляется из dict после окончания
Но, если я изменю функцию add () для удаления вновь добавленного элемента из dict, то мне понравится:
def add(self):
self.counter = self.counter + 1
self.token_names[str(self.counter)] = MyClass()
del self.token_names[str(self.counter)]
Память при этом не увеличиваетсяtest.
Итак, я не знаю, упускаю ли я что-то в этом примере или что-то не так?
Не могли бы вы все помочь мне в этом?