importrandomfromabcimportABC,abstractmethod# Maximum backoff between each retry in secondsDEFAULT_CAP=0.512# Minimum backoff between each retry in secondsDEFAULT_BASE=0.008
[文档]defreset(self):""" Reset internal state before an operation. `reset` is called once at the beginning of every call to `Retry.call_with_retry` """pass
[文档]@abstractmethoddefcompute(self,failures:int)->float:"""Compute backoff in seconds upon failure"""pass
[文档]classConstantBackoff(AbstractBackoff):"""Constant backoff upon failure"""def__init__(self,backoff:float)->None:"""`backoff`: backoff time in seconds"""self._backoff=backoff
[文档]classNoBackoff(ConstantBackoff):"""No backoff upon failure"""def__init__(self)->None:super().__init__(0)
[文档]classExponentialBackoff(AbstractBackoff):"""Exponential backoff upon failure"""def__init__(self,cap:float=DEFAULT_CAP,base:float=DEFAULT_BASE):""" `cap`: maximum backoff time in seconds `base`: base backoff time in seconds """self._cap=capself._base=base
[文档]classFullJitterBackoff(AbstractBackoff):"""Full jitter backoff upon failure"""def__init__(self,cap:float=DEFAULT_CAP,base:float=DEFAULT_BASE)->None:""" `cap`: maximum backoff time in seconds `base`: base backoff time in seconds """self._cap=capself._base=base
[文档]classEqualJitterBackoff(AbstractBackoff):"""Equal jitter backoff upon failure"""def__init__(self,cap:float=DEFAULT_CAP,base:float=DEFAULT_BASE)->None:""" `cap`: maximum backoff time in seconds `base`: base backoff time in seconds """self._cap=capself._base=base
[文档]classDecorrelatedJitterBackoff(AbstractBackoff):"""Decorrelated jitter backoff upon failure"""def__init__(self,cap:float=DEFAULT_CAP,base:float=DEFAULT_BASE)->None:""" `cap`: maximum backoff time in seconds `base`: base backoff time in seconds """self._cap=capself._base=baseself._previous_backoff=0