[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