心情随笔1 分钟阅读
发起请求被阻塞挂起
线上一个项目定时去获取汇率,结果有有段时间没有更新了,调查发现有半个月没有执行成功。定时任务是执行了的,但是没有执行成功。
python requests发起请求默认没有设置超时时间
Java也有这个问题,官网公布[JDK-8075484]即使设置了 soTimeout,SocketInputStream.socketRead0 也可以挂起 - Java Bug System (openjdk.org)
没有超时时间,有可能造成阻塞,一致不关闭连接,导致阻塞,
解决办法:
添加超时时间
Python Requests库的默认请求超时时间是None,表示永不超时。
如果需要设置超时时间,可以通过传递timeout参数来指定超时秒数。比如:
pythonCopy codeimport requests
resp = requests.get('http://www.example.com', timeout=3)
这段代码将请求的超时时间设置为3秒。
另外,超时时间还可以分别为:连接超时时间和读取超时时间设置不同的值:
pythonCopy coderesp = requests.get('http://www.example.com', timeout=(3, 10))
这里将接超时时间设为3秒,读取超时时间设为10秒。
Python Requests的默认超时行为是永不超时,但我们可以很容易地通过timeout参数来自定义超时时间。
python 常用请求库超时时间设置
•
requests:开始讲过requests可以通过timeout参数直接设置整个请求的超时时间,很方便。
•
urllib:Python自带的urllib模块,通过urlopen()和Request()可以设置timeout参数:
pythonCopy codeimport urllib.request
req = urllib.request.Request('http://www.example.com')
req.timeout = 3# 设置超时时间为3秒
urllib.request.urlopen(req)•
httpx:这是一个比较新且强大的HTTP客户端库,默认的超时时间是5秒。可以通过timeout参数自定义。
•
aiohttp:这是一个异步HTTP库,对于异步调用可以通过timeout参数设置
有关使用上的问题,欢迎您在底部评论区留言,一起交流~
读者评论
评论会同步写入该文在 Notion 中的页面底部(与正文同页,便于管理)。
暂无评论,欢迎抢沙发。