Python requests timeout的设置
作者:Bottle 发布时间:2022-01-27 01:20:40
背景
最近在搞爬虫,很多小组件里面都使用了 Python 的 requests 库,很好用,很强大。
但最近发现很多任务总是莫名其妙的卡住,不报错,但是就是不继续执行。
排查了一圈,最后把问题锁定在 requests 的 timeout 机制上。
注:本文讨论的是 Python 的第三方模块 requests,并不是 Python 内建模块 urllib 中的 request 模块,请注意区分。
如何设置超时时间
requests 设置超时时间有两种方式。
一种是设置单一值作为 timeout,如下所示:
r = requests.get('https://github.com', timeout=5)
这时, timeout 值将会用作 connect 和 read 二者的共同的超时时间。
另一种是分别制定连接超时和读取超时的时间,如下所示:
r = requests.get('https://github.com', timeout=(3.05, 27))
这里前面的 3.05 表示连接超时时间,27 表示读取超时时间。
官方一般推荐大家把连接超时时间设置为比 3 的整数倍稍微大一点的时间,比如 3.05、6.05 这样,具体原因见 这里。
坑
上面提到的两种超时时间,连接超时和读取超时,并不是都有默认超时时间。
连接超时的默认时间是 21s,而读取超时没有默认时间,换句话说,不会超时。
也就是说,如果一个请求,连接成功了,正在读取数据,但是此时服务器出现了什么问题,或者代理出现了什么问题,那么,这个请求就会一直卡住,不会报错,也不会继续。
天长地久。
避坑
所以,为了避免出现这样的情况,给你的 requests 加上超时时间吧,尤其是请求量巨大的时候。
常在河边走,哪有不湿鞋。
参考资料
Requests 官方文档
补:python requests timeout不起作用 卡死
在使用python 的requests进行数据请求时不设置timeout大部分时候,是会有超时异常的,超时时间大概是20多秒
但是有时候超时会不起作用需要自己制定超时时间,使用timeout=60
response = requests.get(url, headers=headers, proxies=proxies,timeout=60)
但是有时候设置此参数之后仍然会有几分钟甚至是十几分钟没有返回结果可以使用timeout=(50, 60)
timeout参数也可以传入一个包含两个简单浮点数的元组,用来分别设置请求超时时间和读取超时时间。
response = requests.get(url, headers=headers, proxies=proxies,timeout=(50, 60))
来源:https://blog.csdn.net/zhyl8157121/article/details/108810011


猜你喜欢
- 前言哈喽,大家好,我是asong;前几天逛github发现了一个有趣的并发库-conc,其目标是:更难出现goroutine泄漏处理pani
- 月份转换到中文Function MonthToCH(TheMonth) Dim mm mm=split("一,
- let和const声明的变量只在代码块内有效{let a = 10;var b = 1;}a // ReferenceError: a is
- decode()方法使用注册编码的编解码器的字符串进行解码。它默认为默认的字符串编码。语法以下是decode()方法的语法:st
- httpparser介绍:1.解析字节类型的http与https请求数据:2.支持已k-v形式修改请求数据:3.支持重新编码请求数据源码im
- 做一个简单WPF连接数据库的控件类型和名称:DataGrid:dataGrid &
- 在Perfection kills上看到他去年写的一篇文章,关于HTML优化的,讲的很详细,姑且记录之,尽管里面有些东西并不能在目前的环境里
- 很多的朋友一而再,再而三的在Server.Mappath上卡壳,cnbruce也是一遍两遍地重复,还是不能全部解决,所以通过下面的举例,希望
- 利用seek监控文件内容,并打印出变化内容:#/usr/bin/env python#-*- coding=utf-8 -*-pos = 0
- 本文实例讲述了Python中Django框架利用url来控制登录的方法。分享给大家供大家参考。具体如下:from django.conf.u
- 1. 定时器使用不当1.1 time.After()的使用默认的time.After()是会有内存泄露问题的,因为每次time.After(
- 为什么需要线程锁当我们访问一些特殊的数据时,需要保证该数据的原子性,比如: 文章的阅读量、文章的点赞量等。我们必须要确保这些共享数据必须是原
- 目录1. 序列2. 列表2.1 列表的特性2.1.1 列表的连接操作符和重复操作符2.1.3 列表的索引2.1.4 列表的切片2.1.5 列
- 本文由伯乐在线 - 敏捷翻译的史莉萍翻译自《Creating an Effective Color-Scheme for Web Desig
- 在许多网页中,当鼠标移到一张图片上时,又弹出另一张图片,做这种广告条,要用到Macromedia Dr
- 一、背景介绍今天,野鸡大学高(三)班的月考成绩出来了,这里先给大家公布一下各位同学的考试成绩。接着,在给大家公布一下各位同学的生活消费情况。
- 在平时开发过程中,经常遇到需要在数据中获取特定的元素的信息,如到达目的地最近的车站,橱窗里面最贵的物品等等。怎么办?看下面方法一: 利用数组
- CSS Sprites 简介:通常被意译为“CSS图像拼合”或“CSS贴图定位”。CSS Sprites并不是一门新技术,目前它已经在网页开
- 这个可以说属性选择符的JS版,用来遴选元素是适合不过。在开始之前,我们复习一下CSS2的属性选择符,JQuery高手可以跳过。属性选择符:名
- Protobuf是google开发的一个序列化和反序列化的协议库,我们可以自己设计传递数据的格式,通过.proto文件定义我们的要传递的数据