zoukankan      html  css  js  c++  java
  • retry之python重试机制

    安装 pip install retry
    Retry装饰器

    retry(exceptions=Exception, tries=-1, delay=0, max_delay=None, backoff=1, jitter=0, logger=logging_logger):

        """Return a retry decorator.

     

        :param exceptions: an exception or a tuple of exceptions to catch. default: Exception.

        :param tries: the maximum number of attempts. default: -1 (infinite).

        :param delay: initial delay between attempts. default: 0.

        :param max_delay: the maximum value of delay. default: None (no limit).

        :param backoff: multiplier applied to delay between attempts. default: 1 (no backoff).

        :param jitter: extra seconds added to delay between attempts. default: 0.

                       fixed if a number, random if a range tuple (min, max)

        :param logger: logger.warning(fmt, error, delay) will be called on failed attempts.

                       default: retry.logging_logger. if None, logging is disabled.

        """

    使用

    @retry(ZeroDivisionError, tries=3, delay=2)

    def make_trouble():

     
    retry_call

    def retry_call(f, fargs=None, fkwargs=None, exceptions=Exception, tries=-1, delay=0, max_delay=None, backoff=1,

                   jitter=0,

                   logger=logging_logger):

        """

        Calls a function and re-executes it if it failed.

     

        :param f: the function to execute.

        :param fargs: the positional arguments of the function to execute.

        :param fkwargs: the named arguments of the function to execute.

        :param exceptions: an exception or a tuple of exceptions to catch. default: Exception.

        :param tries: the maximum number of attempts. default: -1 (infinite).

        :param delay: initial delay between attempts. default: 0.

        :param max_delay: the maximum value of delay. default: None (no limit).

        :param backoff: multiplier applied to delay between attempts. default: 1 (no backoff).

        :param jitter: extra seconds added to delay between attempts. default: 0.

                       fixed if a number, random if a range tuple (min, max)

        :param logger: logger.warning(fmt, error, delay) will be called on failed attempts.

                       default: retry.logging_logger. if None, logging is disabled.

        :returns: the result of the f function.

        """

    该方法和retry装饰器类似,除了它带函数和函数的参数,他可以动态的判断重试次数

    import requests

    from retry.api import retry_call

    def make_trouble(service, info=None):

        if not info:

            info = ''

        r = requests.get(service + info)

        return r.text

    def what_is_my_ip(approach=None):

        if approach == "optimistic":

            tries = 1

        elif approach == "conservative":

            tries = 3

        else:

            # skeptical

            tries = -1

        result = retry_call(make_trouble, fargs=["http://ipinfo.io/"], fkwargs={"info": "ip"}, tries=tries)

        print(result)

     

    what_is_my_ip("conservative")

     
  • 相关阅读:
    寒假学习报告05
    寒假学习报告04
    微信推送信息,支付宝支付接口
    Vue组件生成依赖文件,contentype
    redis之列表字典操作
    drf版本控制redis基础
    drf分页器,url控制器,解析器,响应器
    drf认证权限频率
    drf视图认证组件
    drf序列化组件
  • 原文地址:https://www.cnblogs.com/hellowcf/p/7344705.html
Copyright © 2011-2022 走看看