[Checkins] SVN: zope.interface/branches/jinty-mem/src/zope/interface/interface.py Be lazy about creating dependents weakref.
Brian Sutherland
jinty at web.de
Fri Nov 5 04:01:03 EDT 2010
Log message for revision 118222:
Be lazy about creating dependents weakref.
Saves 2.1% of resident memory size in my real world app.
Changed:
U zope.interface/branches/jinty-mem/src/zope/interface/interface.py
-=-
Modified: zope.interface/branches/jinty-mem/src/zope/interface/interface.py
===================================================================
--- zope.interface/branches/jinty-mem/src/zope/interface/interface.py 2010-11-05 07:59:12 UTC (rev 118221)
+++ zope.interface/branches/jinty-mem/src/zope/interface/interface.py 2010-11-05 08:01:02 UTC (rev 118222)
@@ -260,16 +260,20 @@
# Copy some base class methods for speed
isOrExtends = SpecificationBase.isOrExtends
providedBy = SpecificationBase.providedBy
+ dependents = None
def __init__(self, bases=()):
self._implied = {}
- self.dependents = weakref.WeakKeyDictionary()
self.__bases__ = tuple(bases)
def subscribe(self, dependent):
+ if self.dependents is None:
+ self.dependents = weakref.WeakKeyDictionary()
self.dependents[dependent] = self.dependents.get(dependent, 0) + 1
def unsubscribe(self, dependent):
+ if self.dependents is None:
+ raise KeyError(dependent)
n = self.dependents.get(dependent, 0) - 1
if not n:
del self.dependents[dependent]
@@ -325,8 +329,9 @@
implied[ancestor] = ()
# Now, advise our dependents of change:
- for dependent in self.dependents.keys():
- dependent.changed(originally_changed)
+ if self.dependents is not None:
+ for dependent in self.dependents.keys():
+ dependent.changed(originally_changed)
def interfaces(self):
More information about the checkins
mailing list