【发布时间】:2020-05-25 18:06:06
【问题描述】:
我正在写一个这样的python类:
class MyImageProcessor:
def __init__ (self, image, metadata):
self.image=image
self.metadata=metadata
image 和 metadata 都是由 a 编写的类的对象
同事。现在我需要确保没有内存浪费。我正在考虑定义一个像这样的quit() 方法,
def quit():
self.image=None
self.metadata=None
import gc
gc.collect()
并建议用户系统地拨打quit()。我想知道这是否是正确的方法。特别是,上面quit() 中的说明是否保证可以很好地收集未使用的内存?
或者,我可以将quit() 重命名为内置__exit__(),并建议用户使用“with”语法。但我的问题是
更多关于 quit() 中的指令是否确实完成了在这种情况下需要的垃圾收集工作。
感谢您的帮助。
【问题讨论】:
-
gc模块不是默认自动采集的吗?
-
无需在 RAII 上实现您自己的表单。一旦所有对
image和metadata的引用不再存在,gc 会自动将它们从内存中删除。如果image和metadata仅在MyImageProcessor中被引用,那么您需要做的就是确保MyImageProcessor实例的生存时间不会超过它们需要的时间(例如,通过将它们添加到列表或字典中或其他东西,从不删除它们)。一旦超出范围,并且没有对它的剩余引用,gc 会将其从内存中删除。
标签: python python-3.x memory-management garbage-collection