mirror of
https://github.com/Syncplay/syncplay
synced 2024-12-11 09:25:14 +00:00
Refactoring
This commit is contained in:
parent
efec7f030b
commit
d7c43f2e54
42
syncplay/util.py
Normal file
42
syncplay/util.py
Normal file
@ -0,0 +1,42 @@
|
||||
import time
|
||||
|
||||
def retry(ExceptionToCheck, tries=4, delay=3, backoff=2, logger=None):
|
||||
"""Retry calling the decorated function using an exponential backoff.
|
||||
|
||||
http://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/
|
||||
original from: http://wiki.python.org/moin/PythonDecoratorLibrary#Retry
|
||||
|
||||
:param ExceptionToCheck: the exception to check. may be a tuple of
|
||||
excpetions to check
|
||||
:type ExceptionToCheck: Exception or tuple
|
||||
:param tries: number of times to try (not retry) before giving up
|
||||
:type tries: int
|
||||
:param delay: initial delay between retries in seconds
|
||||
:type delay: int
|
||||
:param backoff: backoff multiplier e.g. value of 2 will double the delay
|
||||
each retry
|
||||
:type backoff: int
|
||||
:param logger: logger to use. If None, print
|
||||
:type logger: logging.Logger instance
|
||||
"""
|
||||
def deco_retry(f):
|
||||
def f_retry(*args, **kwargs):
|
||||
mtries, mdelay = tries, delay
|
||||
try_one_last_time = True
|
||||
while mtries > 1:
|
||||
try:
|
||||
return f(*args, **kwargs)
|
||||
try_one_last_time = False
|
||||
break
|
||||
except ExceptionToCheck, e:
|
||||
if logger:
|
||||
msg = "%s, Retrying in %d seconds..." % (str(e), mdelay)
|
||||
logger.warning(msg)
|
||||
time.sleep(mdelay)
|
||||
mtries -= 1
|
||||
mdelay *= backoff
|
||||
if try_one_last_time:
|
||||
return f(*args, **kwargs)
|
||||
return
|
||||
return f_retry # true decorator
|
||||
return deco_retry
|
Loading…
Reference in New Issue
Block a user