[Checkins] SVN: zc.catalogqueue/trunk/src/zc/catalogqueue/queue. Made the computation of length lazy.

Jim Fulton jim at zope.com
Sat May 10 13:07:10 EDT 2008


Log message for revision 86615:
  Made the computation of length lazy.
  

Changed:
  U   zc.catalogqueue/trunk/src/zc/catalogqueue/queue.py
  U   zc.catalogqueue/trunk/src/zc/catalogqueue/queue.txt

-=-
Modified: zc.catalogqueue/trunk/src/zc/catalogqueue/queue.py
===================================================================
--- zc.catalogqueue/trunk/src/zc/catalogqueue/queue.py	2008-05-10 09:39:48 UTC (rev 86614)
+++ zc.catalogqueue/trunk/src/zc/catalogqueue/queue.py	2008-05-10 17:07:08 UTC (rev 86615)
@@ -33,20 +33,28 @@
     lastProcessedTime = None
     totalProcessed = 0
 
-    _buckets = 1009 # Maybe configurable someday
-
-    def __init__(self):
-        self._length = BTrees.Length.Length()
+    def __init__(self, buckets=1009):
+        self._buckets = buckets
         self._queues = [
             zc.catalogqueue.CatalogEventQueue.CatalogEventQueue()
-            for i in range(self._buckets)
+            for i in range(buckets)
             ]
 
     def __len__(self):
-        return self._length()
+        try:
+            return self._length()
+        except AttributeError:
+            return 0
 
+    def _change_length(self, change):
+        try:
+            length = self._length
+        except AttributeError:
+            length = self._length = BTrees.Length.Length()
+        length.change(change)
+
     def _notify(self, id, event):
-        self._length.change(
+        self._change_length(
             self._queues[hash(id) % self._buckets].update(id, event))
 
     def add(self, id):
@@ -73,7 +81,7 @@
                         for catalog in catalogs:
                             catalog.index_doc(id, ob)
                 done += 1
-                self._length.change(-1)
+                self._change_length(-1)
 
             if done >= limit:
                 break

Modified: zc.catalogqueue/trunk/src/zc/catalogqueue/queue.txt
===================================================================
--- zc.catalogqueue/trunk/src/zc/catalogqueue/queue.txt	2008-05-10 09:39:48 UTC (rev 86614)
+++ zc.catalogqueue/trunk/src/zc/catalogqueue/queue.txt	2008-05-10 17:07:08 UTC (rev 86615)
@@ -7,6 +7,11 @@
     >>> import zc.catalogqueue.queue
     >>> queue = zc.catalogqueue.queue.CatalogQueue()
 
+We can pass a queue size.  It should be a prime number. The default is
+1009, which is a bit large.
+
+    >>> queue = zc.catalogqueue.queue.CatalogQueue(11)
+
 Typically, queues are registered as
 zc.catalogqueue.interfaces.ICatalogQueue utilities.
 



More information about the Checkins mailing list