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

     
  • 相关阅读:
    Diango基础学习
    Python02-作业(购物车)
    使用spring boot + Thymeleaf实现web小页面
    Python-01作业(登录和三级菜单)
    Java反射机制
    Socket编程
    利用java的url实现小型的网页爬虫
    关于在spring boot里使用Thymeleaf模板的application.properties配置
    Spring
    Spring-bean的自动装配
  • 原文地址:https://www.cnblogs.com/hellowcf/p/7344705.html
Copyright © 2020-2023  润新知