安装 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. C# 使用委托实现多线程调用窗体的四种方式(转)

    1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...

  2. Tomcat设置UTF-8字符

    进入tomat路径 vim  conf/server.xml

  3. Hadoop YARN上运行MapReduce程序

    (1)配置集群 (a)配置hadoop-2.7.2/etc/hadoop/yarn-env.sh 配置一下JAVA_HOME export JAVA_HOME=/home/hadoop/bigdata ...

  4. Hanlp实战HMM-Viterbi角色标注中国人名识别

    这几天写完了人名识别模块,与分词放到一起形成了两层隐马模型.虽然在算法或模型上没有什么新意,但是胜在训练语料比较新,对质量把关比较严,实测效果很满意.比如这句真实的新闻“签约仪式前,秦光荣.李纪恒.仇 ...

  5. chrome flash

    chrome://settings/content/flash 在Chrome地址栏中输入:chrome://settings/content/flash,进入Flash设置,勾选允许网站运行flas ...

  6. DS树+图综合练习--带权路径和

    题目描述 计算一棵二叉树的带权路径总和,即求赫夫曼树的带权路径和. 已知一棵二叉树的叶子权值,该二叉树的带权案路径和APL等于叶子权值乘于根节点到叶子的分支数,然后求总和.如下图中,叶子都用大写字母表 ...

  7. C/C++中字符串和数字互转小结

    一. 数字 转 char*型 1.sprintf函数(适合C和C++) 示例: char str[50]; int num = 345; sprintf(str,"%d",num) ...

  8. chrome 抓包的小功能--preserve log (记录页面跳转后,所有的抓包记录)

    1.记录页面跳转后,所有的抓包记录,勾上

  9. HDOJ 2013 蟠桃记

    #include<iostream> using namespace std; int main() { int n; while (cin >> n) { ; ;i < ...

  10. shell命令输出

    在shell脚本中的打印输出通常会有echo和printf两种,前者会自动换行. 一.echo Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出.您可以使用ech ...