Update to streaming read loop to use delimited stream mode.
authorSteve Jones <steve.r.jones@gmail.com>
Tue, 17 Apr 2012 01:55:48 +0000 (22:55 -0300)
committerSteve Jones <steve.r.jones@gmail.com>
Tue, 17 Apr 2012 01:55:48 +0000 (22:55 -0300)
1) read newlines until a digit appears
2) read rest of digits until another new line appears
3) read next status object
4) repeat

-improved speed over trunk version
-simplify loop logic
-added condition for "self.running and not resp.isclosed()" during each read-loop stage

tweepy/streaming.py

index b3d57f35e899756f4b7e27ef06325ee61a6ff3a5..e9d6d669a85699bed347c64d54be08d3fa457172 100644 (file)
@@ -147,18 +147,14 @@ class Stream(object):
 
             # Note: keep-alive newlines might be inserted before each length value.
             # read until we get a digit...
-            c = ''
-            while c not in digits:
+            c = '\n'
+            while c == '\n' and self.running and not resp.isclosed():
                 c = resp.read(1)
             delimited_string = c
 
             # read rest of delimiter length..
-            while 1:
-                d = resp.read(1)
-                if d in digits:
-                    delimited_string += d
-                else:
-                    break
+            while d != '\n' and self.running and not resp.isclosed():
+                delimited_string += resp.read(1)                
 
             # read the next twitter status object
             if delimited_string.isdigit():