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

 

retry之python重试机制的更多相关文章

  1. Java之Retry重试机制详解

    应用中需要实现一个功能: 需要将数据上传到远程存储服务,同时在返回处理成功情况下做其他操作.这个功能不复杂,分为两个步骤:第一步调用远程的Rest服务上传数据后对返回的结果进行处理:第二步拿到第一步结 ...

  2. springboot 整合retry(重试机制)

    当我们调用一个接口可能由于网络等原因造成第一次失败,再去尝试就成功了,这就是重试机制,spring支持重试机制,并且在Spring Cloud中可以与Hystaix结合使用,可以避免访问到已经不正常的 ...

  3. 【Dubbo 源码解析】07_Dubbo 重试机制

    Dubbo 重试机制 通过前面 Dubbo 服务发现&引用 的分析,我们知道,Dubbo 的重试机制是通过 com.alibaba.dubbo.rpc.cluster.support.Fail ...

  4. Spring Cloud 请求重试机制核心代码分析

    场景 发布微服务的操作一般都是打完新代码的包,kill掉在跑的应用,替换新的包,启动. spring cloud 中使用eureka为注册中心,它是允许服务列表数据的延迟性的,就是说即使应用已经不在服 ...

  5. Volley超时重试机制

    基础用法 Volley为开发者提供了可配置的超时重试机制,我们在使用时只需要为我们的Request设置自定义的RetryPolicy即可. 参考设置代码如下: int DEFAULT_TIMEOUT_ ...

  6. SpringCloud | FeignClient和Ribbon重试机制区别与联系

    在spring cloud体系项目中,引入的重试机制保证了高可用的同时,也会带来一些其它的问题,如幂等操作或一些没必要的重试. 今天就来分别分析一下 FeignClient 和 Ribbon 重试机制 ...

  7. Spring Cloud重试机制与各组件的重试总结

    SpringCloud重试机制配置 首先声明一点,这里的重试并不是报错以后的重试,而是负载均衡客户端发现远程请求实例不可到达后,去重试其他实例. ? 1 2 3 4 5 6 7 8 @Bean @Lo ...

  8. spring-retry 重试机制

    业务场景 应用中需要实现一个功能: 需要将数据上传到远程存储服务,同时在返回处理成功情况下做其他操作.这个功能不复杂,分为两个步骤:第一步调用远程的Rest服务逻辑包装给处理方法返回处理结果:第二步拿 ...

  9. guava的重试机制guava-retrying使用

    1,添加maven依赖 <dependency> <groupId>com.github.rholder</groupId> <artifactId>g ...

随机推荐

  1. Tomcat设置UTF-8字符

    进入tomat路径 vim  conf/server.xml

  2. Spring Cloud(Dalston.SR5)--Hystrix 断路器

    Spring Cloud 对 Hystrix 进行了封装,使用 Hystrix 是通过 @HystrixCommand 注解来使用的,被 @HystrixCommand 注解标注的方法,会使用 Asp ...

  3. phpmailer使用qq邮箱、163邮箱成功发送邮件实例代码

    以前使用qq邮箱.163服务器发送邮件,帐号直接使用密码,现在不行了,得使用授权码,简单记录下 1.首先开通POP3/SMTP服务,qq邮箱——帐号——设置,找到POP3/SMTP点开启,输入短信会有 ...

  4. Task Class

    https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.tasks.task?redirectedfrom=MSDN&view ...

  5. InfluxDB 常用命令

    查表: http://192.168.0.200:8086/query?q=select+*+from+telegraf..cpu http://192.168.0.200:8086/query?q= ...

  6. xsd操作

    1.xsd介绍 详见: http://blog.sina.com.cn/s/blog_ad0672d60102uy6w.html 2.生成xsd DataSet dataSet = new DataD ...

  7. c#读取Sybase中文乱码的解决办法

    最近需要从Sybase数据库中获取数据.用Sybase.Data.AseClient连接的话比较简单,但中文数据会有乱码.用Sybase自带的工具SQL Advantage设置好编码和语言,是可以正常 ...

  8. pytest.6.Parametrize Fixture

    From: http://www.testclass.net/pytest/parametrizing_fixture/ 背景 @pytest.mark.parametrize 装饰器可以让我们每次参 ...

  9. SpringBoot使用redis缓存List

    一.概述 最近在做性能优化,之前有一个业务是这样实现的: 1.温度报警后第三方通讯管理机直接把报警信息保存到数据库: 2.我们在数据库中添加触发器,(BEFORE INSERT)根据这条报警信息处理业 ...

  10. 【ActiveMQ】之安全机制(一)管控台安全设置

    ActiveMQ 管控台基于jetty,默认端口8161,默认用户名,密码都是admin,这样的安全配置过于弱化,所以我们需要修改一下 1.修改端口 找到conf/jetty.xml文件里面这一段配置 ...