[Neo-report] r2553 vincent - /trunk/neo/client/mq.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Dec 16 12:19:35 CET 2010


Author: vincent
Date: Thu Dec 16 12:19:35 2010
New Revision: 2553

Log:
Remove FIFO head & tail accessors.

Hotshot profiling shows FIFO.head() is called very often (~300k times for
embedded test suite). This change showed a ~30% speed increase for tested
case.

Modified:
    trunk/neo/client/mq.py

Modified: trunk/neo/client/mq.py
==============================================================================
--- trunk/neo/client/mq.py [iso-8859-1] (original)
+++ trunk/neo/client/mq.py [iso-8859-1] Thu Dec 16 12:19:35 2010
@@ -69,8 +69,8 @@ class FIFO(object):
     """
 
     def __init__(self):
-        self._head = None
-        self._tail = None
+        self.head = None
+        self.tail = None
         self._len = 0
         self.prev = None
         self.data = None
@@ -88,23 +88,17 @@ class FIFO(object):
     def append(self):
         element = Element()
         element.next = None
-        element.prev = self._tail
-        if self._tail is not None:
-            self._tail.next = element
-        self._tail = element
-        if self._head is None:
-            self._head = element
+        element.prev = self.tail
+        if self.tail is not None:
+            self.tail.next = element
+        self.tail = element
+        if self.head is None:
+            self.head = element
         self._len += 1
         return element
 
-    def head(self):
-        return self._head
-
-    def tail(self):
-        return self._tail
-
     def shift(self):
-        element = self._head
+        element = self.head
         if element is None:
             return None
         del self[element]
@@ -114,12 +108,12 @@ class FIFO(object):
 
     def __delitem__(self, element):
         if element.next is None:
-            self._tail = element.prev
+            self.tail = element.prev
         else:
             element.next.prev = element.prev
 
         if element.prev is None:
-            self._head = element.next
+            self.head = element.next
         else:
             element.prev.next = element.next
 
@@ -297,7 +291,7 @@ class MQ(object):
         time = self._time
         for level in xrange(self._buffer_levels):
             cache_buffer = cache_buffers[level]
-            head = cache_buffer.head()
+            head = cache_buffer.head
             if head is not None and head.data.expire_time < time:
                 del cache_buffer[head]
                 data = head.data
@@ -316,7 +310,7 @@ class MQ(object):
         if self._size > max_size:
             for cache_buffer in cache_buffers:
                 while self._size > max_size:
-                    element = cache_buffer.head()
+                    element = cache_buffer.head
                     if element is None:
                         break
                     self._evict(element.data.key)




More information about the Neo-report mailing list