Skip to content

Commit 2ed06a6

Browse files
author
Jim Moffitt
committed
Updating handling of rate limit errors. And some errors should short-circuit rather than retry.
1 parent 7875afb commit 2ed06a6

File tree

1 file changed

+24
-10
lines changed

1 file changed

+24
-10
lines changed

searchtweets/result_stream.py

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,9 @@ def retry(func):
7373
7474
"""
7575
def retried_func(*args, **kwargs):
76-
max_tries = 3
76+
max_tries = 10
7777
tries = 0
78+
total_sleep_seconds = 0
7879
while True:
7980
try:
8081
resp = func(*args, **kwargs)
@@ -88,21 +89,34 @@ def retried_func(*args, **kwargs):
8889
raise exc
8990

9091
if resp.status_code != 200 and tries < max_tries:
91-
logger.warning("retrying request; current status code: {}"
92-
.format(resp.status_code))
92+
9393
tries += 1
94+
95+
logger.error(f"HTTP Error code: {resp.status_code}: {resp.text}")
96+
logger.error(f"Request payload: {kwargs['rule_payload']}")
97+
98+
if resp.status_code == 429:
99+
logger.warning("Rate limit hit... Will retry...")
100+
#print("Rate limit hit... Will retry...")
101+
sleep_seconds = min(((tries * 2) ** 2), 900 - total_sleep_seconds)
102+
total_sleep_seconds = total_sleep_seconds + sleep_seconds
103+
104+
elif resp.status_code >= 500:
105+
logger.warning("Server-side error... Will retry...")
106+
#print("Server-side error... Will retry...")
107+
sleep_seconds = 30
108+
else:
109+
#Other errors are a "one and done", no use in retrying error...
110+
raise requests.exceptions.HTTPError
111+
94112
# mini exponential backoff here.
95-
time.sleep(tries ** 2)
113+
logger.warning(f"Will retry in {sleep_seconds} seconds...")
114+
#print(f"Will retry in {sleep_seconds} seconds...")
115+
time.sleep(sleep_seconds)
96116
continue
97117

98118
break
99119

100-
if resp.status_code != 200:
101-
error_message = resp.json()["error"]["message"]
102-
logger.error("HTTP Error code: {}: {}".format(resp.status_code, error_message))
103-
logger.error("Rule payload: {}".format(kwargs["rule_payload"]))
104-
raise requests.exceptions.HTTPError
105-
106120
return resp
107121

108122
return retried_func

0 commit comments

Comments
 (0)