Source code for reip.util.func

import time
import functools
from . import iters


[docs]def throttle(func, interval=None): '''Don't call a function more frequently than `duration`. Caches the return value from the previous call.''' if not interval: return func @functools.wraps(func) def inner(*a, **kw): t = time.time() if t - inner.t0 >= interval: inner.t0 = t inner.retval = func(*a, **kw) return inner.retval inner.t0, inner.retval = 0, None return inner
[docs]def retry(func, n=None, exc=Exception, log=None, **kw): '''retry a function on failure.''' @functools.wraps(func) def inner(*a, **kw): for i in iters.run_loop(n=n, **kw): try: return func(*a, **kw) except exc as e: if n is not None and i == n: raise if log is not None: log.error('({}, try={}) {}'.format(e.__class__.__name__, i+1, e)) return inner