在python中设计自定义库时如何正确优化内存管理?

时间:2016-01-03 12:12:30

标签: python memory-management

我正在使用Python 2.7创建一个库。因为我要像这样多次调用这个库(以及其他类似的库),所以我需要确保我不会创建一堆对象(如下面的gm),最终会不再需要时浪费记忆。

但是,我对我的代码感到有点困惑,gm对象仍然存在于with之外:

import mylib
with mylib.GeneralMethods() as gm:
    print gm.say_hello()
>>> hello world

print gm # this is no longer needed, but still exists...
>>> <mylib.GeneralMethods object at 0x10f9c5bd0>

在设计和调用我的库时,有什么办法可以进一步优化内存管理吗? 我不想让流浪的物体吃掉记忆,比如gm

现在,这就是我的库看起来像(大大简化):

class GeneralMethods(object):
    def __init__(self, parent=None):
        super(GeneralMethods, self).__init__()

    def __enter__(self):
        return self

    def __exit__(self, type, value, traceback):
        return isinstance(value, TypeError)

    def say_hello(self):
        return 'hello world'

1 个答案:

答案 0 :(得分:1)

  

我对使用我的代码时gm

之外的with对象仍存在的事实感到有点困惑

这是预期的行为; gm只是另一个变量,它不是在执行离开定义范围之前收集的垃圾。

如果你肯定它值得多加一线,你可以明确地做到:

del gm

请注意,它并不保证对象将立即被垃圾收集 - 如果gm是对象的唯一引用,它只会使它在执行离开作用域之前有资格进行垃圾回收。

如果您担心记忆,请查看__slots__