Python диктует проблему с памятью - PullRequest
0 голосов
/ 01 марта 2019

У меня возникла проблема с памятью в моем приложении при добавлении большого количества объектов в 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.

Итак, я не знаю, упускаю ли я что-то в этом примере или что-то не так?

Не могли бы вы все помочь мне в этом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...