fork download
  1. class LOLERROR(Exception):
  2. pass
  3.  
  4. def retry(tries, delay=3, backoff=2):
  5. def _retry(f):
  6. def f_retry(*args, **kwargs):
  7. last_exception = None
  8. for attempt in range(1, tries + 1):
  9. try:
  10. ret = f(*args, **kwargs)
  11. except Exception as e:
  12. last_exception = e
  13. if attempt < tries:
  14.  
  15. print "sleep:", delay * (backoff ** (attempt - 1))
  16.  
  17. continue
  18. # success
  19. return ret
  20. # ran through our tries, bail out
  21. raise last_exception
  22. return f_retry
  23. return _retry
  24.  
  25.  
  26. #@retry(5)
  27. def foo(a):
  28. print a
  29. raise LOLERROR
  30.  
  31. retry(5)(foo)("test")
Runtime error #stdin #stdout 0.03s 6356KB
stdin
Standard input is empty
stdout
test
sleep: 3
test
sleep: 6
test
sleep: 12
test
sleep: 24
test