安装 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. 使用.pth文件扩展python环境路径

    使用.pth文件扩展python环境路径 有时候我们不希望把一个库放到 site-packages 下面,而是更愿意把它保留在原始的工程目录中,方便管理和维护.那么怎么能让 Python 运行环境找到 ...

  2. 怎么用fiddler抓APP的包

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/liujingqiu/article/details/79387909Fiddler安装 此处略.我们 ...

  3. asp.net开发细节整理

    1.使用entity framework的DB First时,手动书实体类的表单验证 public partial class Fund { } [MetadataType(typeof(Valida ...

  4. RedHat6.5安装单机flume1.6

    版本号: RedHat6.5   JDK1.8   apache-flume-1.6.0 1.apache-flume-1.6.0-bin.tar.gz 下载 官网下载地址:http://archiv ...

  5. line-height的理解

    font-size:0清除display:inline-block元素换行符间隙,比如两个img标签之间有换行符 行内元素的高度是由其行高决定的. Div或者其他元素内的图片,底部会有间隙,原因是图片 ...

  6. 黄聪: $(document).click() 在iphone上不触发事件解决办法

    解决方案:加上 touchstart 事件 $(document).on(“click touchstart”, “.name”, function() { alert(“name”); });  

  7. 数据仓库专题(21):Kimball总线矩阵说明-官方版

    一.前言 Over the years, I have found that a matrix depiction of the data warehouse plan is a pretty goo ...

  8. DS哈希查找--线性探测再散列

    题目描述 定义哈希函数为H(key) = key%11.输入表长(大于.等于11),输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字. --程序要求-- 若使用C++只能include一个 ...

  9. bzoj4480: [Jsoi2013]快乐的jyy

    [问题描述] 给定两个字符串A和B,表示JYY的两个朋友的名字.我们用A(i,j)表示A 字符串中从第i个字母到第j个字母所组成的子串.同样的,我们也可以定义B(x,y). JYY发现两个朋友关系的紧 ...

  10. Requests+正则表达式 爬取猫眼电影

    代码: import re import json from multiprocessing import Pool import requests from requests.exceptions ...