python中关于requests里的timeout()用法

 更新时间:2023年08月17日 15:18:14   作者:fabjia  
这篇文章主要介绍了python中关于requests里的timeout()用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

关于requests里的timeout()用法

timeout(超时)

首先是:为防止服务器不能及时响应,大部分发至外部服务器的请求都应该带着 timeout 参数。在默认情况下,除非显式指定了 timeout 值,requests 是不会自动进行超时处理的。如果没有 timeout,你的代码可能会挂起若干分钟甚至更长时间

其次是:连接超时指的是在你的客户端实现到远端机器端口的连接时(对应的是 connect() ),Request 会等待的秒数。一个很好的实践方法是把连接超时设为比 3 的倍数略大的一个数值,因为 TCP 数据包重传窗口 (TCP packet retransmission window) 的默认大小是 3。

在爬虫代理这一块我们经常会遇到请求超时的问题,代码就卡在哪里,不报错也没有requests请求的响应。

通常的处理是在requests.get()语句中加入timeout限制请求时间

req = requests.get(url, headers=headers, proxies=proxies, timeout=5)

如果发现设置timeout=5后长时间不响应问题依然存在,可以将timeout里的参数细化

作出如下修改后,问题就消失了

req = requests.get(url, headers=headers, proxies=proxies, timeout=(3,7))

python requests timeout 分析

最近在搞爬虫,很多小组件里面都使用了 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编程matplotlib绘图挑钻石seaborn小提琴和箱线图

    Python编程matplotlib绘图挑钻石seaborn小提琴和箱线图

    这篇文章主要为大家介绍了Python编程如何使用matplotlib绘图来挑出完美的钻石以及seaborn小提琴和箱线图,有需要的朋友可以借鉴参考下,希望能够优速帮助
    2021-10-10
  • Pycharm调试程序技巧小结

    Pycharm调试程序技巧小结

    这篇文章主要介绍了Pycharm调试程序技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • numpy下的flatten()函数用法详解

    numpy下的flatten()函数用法详解

    这篇文章主要介绍了numpy下的flatten()函数用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • 利用Python内置库实现创建命令行应用程序

    利用Python内置库实现创建命令行应用程序

    Python 有一个叫做argparse的内置库,可以用它来创建一个命令行界面。本文将详解如何利用argparse实现创建一个命令行应用程序,需要的可以参考一下
    2022-06-06
  • python实现sqlalchemy的使用概述

    python实现sqlalchemy的使用概述

    SQLAlchemy是Python中最有名的ORM工具,特点是操纵Python对象而不是SQL查询,也就是在代码层面考虑的是对象,而不是SQL,体现的是一种程序化思维,这样使得Python程序更加简洁易懂,具体内容详情跟随小编一起看看吧
    2021-08-08
  • Python发送邮件功能示例【使用QQ邮箱】

    Python发送邮件功能示例【使用QQ邮箱】

    这篇文章主要介绍了Python发送邮件功能,结合实例形式分析了Python使用QQ邮箱进行邮件发送的相关设置与使用技巧,需要的朋友可以参考下
    2018-12-12
  • Python图片裁剪实例代码(如头像裁剪)

    Python图片裁剪实例代码(如头像裁剪)

    本篇文章主要介绍了Python图片裁剪实例代码(如: 头像裁剪),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Python基于PycURL自动处理cookie的方法

    Python基于PycURL自动处理cookie的方法

    这篇文章主要介绍了Python基于PycURL自动处理cookie的方法,实例分析了Python基于curl操作cookie的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • python中的随机数种子seed()用法说明

    python中的随机数种子seed()用法说明

    这篇文章主要介绍了python中的随机数种子seed()用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • python实现高效的遗传算法

    python实现高效的遗传算法

    这篇文章主要介绍了python实现高效的遗传算法。想了解算法的同学,可以参考下
    2021-04-04

最新评论