Skip to content

Commit

Permalink
Reconnect according to twitters recommendations.
Browse files Browse the repository at this point in the history
Recommendations found here: https://dev.twitter.com/docs/streaming-apis/connecting#Reconnecting

A simpler and more complete version of
- #132
- #150
only handling the reconnect strategies.
  • Loading branch information
tewalds committed Aug 26, 2013
1 parent 517a0f2 commit 447f69c
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions tweepy/streaming.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,12 @@ def __init__(self, auth, listener, **options):
self.running = False
self.timeout = options.get("timeout", 300.0)
self.retry_count = options.get("retry_count")
self.retry_time = options.get("retry_time", 10.0)
self.snooze_time = options.get("snooze_time", 5.0)
# values according to https://dev.twitter.com/docs/streaming-apis/connecting#Reconnecting
self.retry_time_start = options.get("retry_time", 5.0)
self.retry_420_start = options.get("retry_420", 60.0)
self.retry_time_cap = options.get("retry_time_cap", 320.0)
self.snooze_time_step = options.get("snooze_time", 0.25)
self.snooze_time_cap = options.get("snooze_time_cap", 16)
self.buffer_size = options.get("buffer_size", 1500)
if options.get("secure", True):
self.scheme = "https"
Expand All @@ -108,6 +112,8 @@ def __init__(self, auth, listener, **options):
self.headers = options.get("headers") or {}
self.parameters = None
self.body = None
self.retry_time = self.retry_time_start
self.snooze_time = self.snooze_time_step

def _run(self):
# Authenticate
Expand All @@ -134,9 +140,14 @@ def _run(self):
if self.listener.on_error(resp.status) is False:
break
error_counter += 1
if resp.status == 420:
self.retry_time = max(self.retry_420_start, self.retry_time)
sleep(self.retry_time)
self.retry_time = min(self.retry_time * 2, self.retry_time_cap)
else:
error_counter = 0
self.retry_time = self.retry_time_start
self.snooze_time = self.snooze_time_step
self.listener.on_connect()
self._read_loop(resp)
except timeout:
Expand All @@ -146,6 +157,8 @@ def _run(self):
break
conn.close()
sleep(self.snooze_time)
self.snooze_time = min(self.snooze_time + self.snooze_time_step,
self.snooze_time_cap)
except Exception, exception:
# any other exception is fatal, so kill loop
break
Expand Down

0 comments on commit 447f69c

Please sign in to comment.