【发布时间】:2013-08-14 08:41:55
【问题描述】:
我正在尝试在我拥有的实用程序模块中实现清理例程。在四处寻找解决问题的方法时,我最终决定使用weakref 回调来进行清理。但是,我担心它不会按预期工作,因为在同一个模块中对对象的强引用。举例说明:
foo_lib.py
class Foo(object):
_refs = {}
def __init__(self, x):
self.x = x
self._weak_self = weakref.ref(self, Foo._clean)
Foo._refs[self._weak_self] = x
@classmethod
def _clean(cls, ref):
print 'cleaned %s' % cls._refs[ref]
foo = Foo()
然后其他类引用foo_lib.foo。我确实从 1.5.1 中找到了一份旧文档,其中提到了我的担忧 (http://www.python.org/doc/essays/cleanup/),但没有什么能让我完全放心 foo 将以可靠触发回调的方式发布。任何人都可以向我指出一些可以为我解决这个问题的文档吗?
【问题讨论】:
-
我认为你不想依赖弱引用清理(或者,等效地,
__del__)来完成你真正在做的事情,而且很难给出一个可靠的答案......但它绝对是一个有趣的问题,感谢您让我了解解释器最终确定的实际作用,因为那里也有一些有趣的东西。
标签: python module weak-references resource-cleanup