Skip to content

Instantly share code, notes, and snippets.

@echohack
Last active May 5, 2022 16:56
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save echohack/5059310 to your computer and use it in GitHub Desktop.
Save echohack/5059310 to your computer and use it in GitHub Desktop.
class APIWrapper:
#snippet...
def poll_api(self, tries, initial_delay, delay, backoff, success_list, apifunction, *args):
time.sleep(initial_delay)
for n in range(tries):
try:
status = self.get_status()
if status not in success_list:
polling_time = time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime())
print("{0}. Sleeping for {1} seconds.".format(polling_time, delay))
time.sleep(delay)
delay *= backoff
else:
return apifunction(*args)
except socket.error as e:
print("Connection dropped with error code {0}".format(e.errno))
raise ExceededRetries("Failed to poll {0} within {1} tries.".format(apifunction, tries))
@echohack
Copy link
Author

echohack commented Jun 1, 2013

wouldn't using delay directly cause the next call to poll_api use the old value of delay then?

Oh wait, I think I just answered my own question. No it wouldn't, because delay is immutable.

However, for parameters that are mutable, this could cause a problem I think.

Code updated! Thanks encukou!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment