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")

     
  • 相关阅读:
    常见存储过程分页PK赛——简单测试分析常见存储过程分页速度
    简单的ASP.NET无刷新分页
    程序员45个好习惯
    手机应用兼职开发平台,欢迎有识之士参加...
    DotNetRemoting分布式安全部署(整理+原创)
    刚刚整理的截获SQL错误代码弹出提示信息类.
    485modbus通讯协议
    485通信
    ucoss在stm32上的移植
    使用OFFICE组件出问题环境配置
  • 原文地址:https://www.cnblogs.com/hellowcf/p/7344705.html
Copyright © 2011-2022 走看看