Guest User

Untitled

a guest
May 21st, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. from time import sleep
  2. from functools import wraps
  3. import logging
  4. logging.basicConfig()
  5. log = logging.getLogger("retry")
  6.  
  7.  
  8. def retry(f):
  9. @wraps(f)
  10. def wrapper_function(*args, **kwargs):
  11. MAX_ATTEMPTS = 5
  12. for attempt in range(1, MAX_ATTEMPTS + 1):
  13. try:
  14. return f(*args, **kwargs)
  15. except:
  16. log.exception("Attempt %s/%s failed : %s",
  17. attempt,
  18. MAX_ATTEMPTS,
  19. (args, kwargs))
  20. sleep(10 * attempt)
  21. log.critical("All %s attempts failed : %s",
  22. MAX_ATTEMPTS,
  23. (args, kwargs))
  24. return wrapper_function
  25.  
  26.  
  27. counter = 0
  28.  
  29.  
  30. @retry
  31. def save_to_database(arg):
  32. print("Write to a database or make a network call or etc.")
  33. print("This will be automatically retried if exception is thrown.")
  34. global counter
  35. counter += 1
  36. # This will throw an exception in the first call
  37. # And will work fine in the second call (i.e. a retry)
  38. if counter < 2:
  39. raise ValueError(arg)
  40.  
  41.  
  42. if __name__ == '__main__':
  43. save_to_database("Some bad value")
Add Comment
Please, Sign In to add comment