假设我有一个非常大的Python类,它可能会消耗相当多的内存。该类有一个方法,负责在解释器退出时清除某些内容,并在atexit模块中注册:
import atexit
import os
class ReallyBigClass(object):
def __init__(self, cache_file):
self.cache_file = open(cache_file)
self.data = <some large chunk of data>
atexit.register(self.cleanup)
<insert other methods for manipulating self.data>
def cleanup(self):
os.remove(self.cache_file)
这个类的各种实例可能会在程序的整个生命周期中来来去去。我的问题是:
如果我,比如说,del
对实例的所有其他引用,那么使用atexit注册实例方法是否安全?换句话说,atexit.register()
是否像传统绑定那样增加引用计数器?如果是这样,那么整个类实例现在是否必须在内存中挂起并等待退出,因为它的一个方法已注册到atexit,或者实例的某些部分是否可以被垃圾回收?对于这样的临时类实例,在出口处构造这样的清理,以便有效地进行垃圾收集,最好的方法是什么?
目前没有回答
相关问题 更多 >
编程相关推荐