]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Replace IOStream._read_buffer_size() with a simple counter to speed up performance... 277/head
authorRickard B <rickardb@mashmobile.com>
Tue, 7 Jun 2011 10:22:23 +0000 (12:22 +0200)
committerRickard B <rickardb@mashmobile.com>
Tue, 7 Jun 2011 10:22:23 +0000 (12:22 +0200)
tornado/iostream.py

index 38c1a2ba3834711d6e78bef48a9cb626a92c6698..ad5e43699cd61157420a90de6453927abb4b8b2c 100644 (file)
@@ -87,6 +87,7 @@ class IOStream(object):
         self.read_chunk_size = read_chunk_size
         self._read_buffer = collections.deque()
         self._write_buffer = collections.deque()
+        self._read_buffer_size = 0
         self._write_buffer_frozen = False
         self._read_delimiter = None
         self._read_bytes = None
@@ -313,7 +314,8 @@ class IOStream(object):
         if chunk is None:
             return 0
         self._read_buffer.append(chunk)
-        if self._read_buffer_size() >= self.max_buffer_size:
+        self._read_buffer_size += len(chunk)
+        if self._read_buffer_size >= self.max_buffer_size:
             logging.error("Reached maximum read buffer size")
             self.close()
             raise IOError("Reached maximum read buffer size")
@@ -325,7 +327,7 @@ class IOStream(object):
         Returns True if the read was completed.
         """
         if self._read_bytes:
-            if self._read_buffer_size() >= self._read_bytes:
+            if self._read_buffer_size >= self._read_bytes:
                 num_bytes = self._read_bytes
                 callback = self._read_callback
                 self._read_callback = None
@@ -393,6 +395,7 @@ class IOStream(object):
 
     def _consume(self, loc):
         _merge_prefix(self._read_buffer, loc)
+        self._read_buffer_size -= loc
         return self._read_buffer.popleft()
 
     def _check_closed(self):
@@ -407,9 +410,6 @@ class IOStream(object):
             self._state = self._state | state
             self.io_loop.update_handler(self.socket.fileno(), self._state)
 
-    def _read_buffer_size(self):
-        return sum(len(chunk) for chunk in self._read_buffer)
-
 
 class SSLIOStream(IOStream):
     """A utility class to write to and read from a non-blocking socket.