requests使用retry策略
网络请求往往会有很多不受控制的意外情况发生,有时候我们要让它let it crash,有时候我们想多尝试几次。
以前,使用retry策略,我一般会使用tenacity1这个第三方库。这个库的API相当得漂亮,很多大V也推荐过。
最近,我看了一篇文章2,是requests的作者之一写的。他告诉我们,requests原生就支持retry。
在urllib3中使用retry
urllib3使用PoolManager,可以对特定的response设置retry。
比如,下面我们对500错误进行了retry:
from urllib3.util import Retry
from urllib3 import PoolManager
retries = Retry(total=5, status_forcelist=[500])
manager = PoolManager(retries=retries)
response = manager.request('GET', 'https://httpbin.org/status/500')
在requests中使用retry
from requests.packages.urllib3.util import Retry
from requests.adapters import HTTPAdapter
from requests import Session, exceptions
s = Session()
s.mount('https://', HTTPAdapter(
max_retries=Retry(total=5, status_forcelist=[500])
)
)
s.get('https://httpbin.org/status/500')
可以看到requests的API一贯的简洁。另外需要知道的是这里利用了requests的"传输适配器(Transport Adapter)",如果你对这个不了解,请看这篇博客3.
requests使用retry策略的更多相关文章
- spring retry 使用
1. 场景 系统方法调用时无状态的,同时因为网络原因,或者系统暂时故障,进行的重试 2. maven 依赖 <project xmlns="http://maven.apa ...
- retry之python重试机制
安装 pip install retry Retry装饰器 retry(exceptions=Exception, tries=-1, delay=0, max_delay=None, backoff ...
- Retry模式
Retry模式能够通过重复之前失败的操作来处理那些在调用远端服务或者网络资源的时候发生的一些可以预期的临时性的错误.Retry模式可以提高应用的稳定性. 问题 应用中,负责链接其他服务的组件必须要对环 ...
- 使用requests库实现多线程下载
多线程下载主要用到http请求中的header Content-Length:资源长度,用于确认资源的总长度,从而便于规划每个线程的任务量 Range:bytes=beg1-end1;beg2-end ...
- python Max retries exceeded with URL in requests
使用requests进行重试 import requests from requests.adapters import HTTPAdapter from requests.packages.urll ...
- Python--urllib3库详解1
Python--urllib3库详解1 Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3.Urllib3提供了很多pyt ...
- 洗礼灵魂,修炼python(58)--爬虫篇—【转载】urllib3模块
urllib3 1.简介 urllib3相比urllib,urlib2,又有些一些新的功能,可以实现很多东西,而这个模块有点特殊的是,并且还可以同时存在于python2和python3,但说实话,用的 ...
- Python--urllib3库
Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3.Urllib3提供了很多python标准库里所没有的重要特性: 1 ...
- Knative Serving 健康检查机制分析
作者| 阿里云智能事业群技术专家牛秋霖(冬岛) 导读:从头开发一个Serverless引擎并不是一件容易的事情,今天咱们就从Knative的健康检查说起.通过健康检查这一个点来看看Serverles ...
随机推荐
- RB-Tree删除详解
红黑树的删除操作较于插入操作,情况更为复杂: 考虑到红黑节点的差异性,我们在此通过红黑节点来考虑这个问题,即仅仅通过要删除的节点是红节点,还是黑节点来讨论不同的情况: 1 删除的红节点为叶子结点(此 ...
- VMware 安装 centos6.8
参考文档:https://jingyan.baidu.com/article/49711c61964328fa441b7c93.html 准备工作 VMware Workstation Pro 下载地 ...
- idea 转载
转载:https://blog.csdn.net/qq_34033853/article/details/77448431 摘要:在创建类时,自动生成代码的注释模板 本篇内容为大家提供的是Intell ...
- cocos 资源工作流程
前面的话 本文将详细介绍 cocos 中的资源工作流程 概述 [同步性] 资源管理器中的资源和操作系统的文件管理器中看到的项目资源文件夹是同步的 在资源管理器中对资源的移动.重命名和删除,都会直接在用 ...
- cetos6.8配置svn服务器
一,安装步骤 1, 检查是否安装过svn rpm -qa subversion 2, 卸载旧版本svn yum remove subversion 3, 安装SVN,输入官网提供的命令 yum ...
- java篇 之 操作符
操作符:1.赋值操作符 用(+= ,^=...不会改变类型,如果用 = 会进行隐式转换类型) short x = 0; int i = 123456; x += i;//编译通过 x= x + i;/ ...
- bugku web web5
JSPFUCK??????答案格式CTF{**} http://123.206.87.240:8002/web5/ 字母大写 jspfuck这不是骂人吗,怎么回事啊? ·点进去看见有一个可以输入的框, ...
- 【转载】利用window.performance.timing进行性能分析
利用window.performance.timing进行性能分析 性能分析... window.performance.timing中相关属性语义: // .navigationStart 准备 ...
- Python中的eval(),exec()以及其相关函数
1. eval函数 函数的作用: 计算指定表达式的值.也就是说它要执行的Python代码只能是单个运算表达式(注意eval不支持任意形式的赋值操作),而不能是复杂的代码逻辑,这一点和lambda表达式 ...
- 如何关闭WIN7自动配置 IPV4 地址 169.254
如何关闭WIN7自动配置 IPV4 地址 169.254 以管理员身份运行cmd.exe 输入:netsh winsock reset catalog 回车 输入:netsh int ip reset ...