0

0

Python requests 超时设置到底该写 timeout=(连接超时, 读取超时)

舞姬之光

舞姬之光

发布时间:2026-01-23 17:31:43

|

686人浏览过

|

来源于php中文网

原创

timeout=(3, 10)中第一个数字控制连接超时(TCP握手完成前),第二个控制读取超时(等待响应首字节)。单数字timeout=5等价于(5,5),生产环境易出问题。

python requests 超时设置到底该写 timeout=(连接超时, 读取超时)

timeout=(3, 10) 中两个数字分别控制什么

第一个是连接超时(connect timeout),即 TCP 握手完成、建立连接前等待的最大时间;第二个是读取超时(read timeout),指连接建立后,等待服务器返回**第一个字节**的时间(不是整个响应体下载完的时间)。

常见误解是认为第二个参数控制“整个请求耗时”,其实不是——一旦开始接收数据,后续的传输(比如大文件分块接收)就不再受这个读取超时约束,除非你手动设置 stream=True 并逐块调用 response.iter_content(),否则默认行为只卡在“等首字节”这一步。

  • 若 DNS 解析慢或目标 IP 不可达,connect timeout 会先触发
  • 若服务端卡在业务逻辑(如数据库查询未返回 HTTP 响应头),read timeout 会触发
  • 若服务端已发响应头但发响应体极慢(例如流式接口每秒只吐 1B),默认不超时;加 stream=True 后需自行对每次 iter_content() 调用设超时

不写元组、只写单个数字会发生什么

传一个数字(如 timeout=5)等价于 timeout=(5, 5),即连接和读取共用同一阈值。这看似省事,但在生产中容易出问题:

  • 内网调用通常连接极快(timeout=3 会误杀合法请求
  • 公网调用连接可能因网络抖动达 2s,若 read timeout 也只设 2s,留给业务处理的时间几乎为零
  • 某些代理或负载均衡器会在连接建立后延迟转发,导致“连接快、读取慢”,单值 timeout 无法精细区分

requests 里 timeout 不生效的几种真实情况

超时参数只作用于 requests 底层的 socket 级操作,以下场景它管不了:

快写红薯通AI
快写红薯通AI

快写红薯通AI,专为小红书而生的AI写作工具

下载

立即学习Python免费学习笔记(深入)”;

  • DNS 解析超时:Python 默认使用系统 getaddrinfo,不受 timeout 控制;需配合 dnspython 或自定义 resolver 才能干预
  • SSL 握手耗时:TLS 协商阶段计入连接超时,但若证书链验证复杂或 OCSP 响应慢,可能突破设定值(尤其在旧版 OpenSSL 上)
  • 重定向跳转:每次跳转都重新走一遍连接+读取流程,timeout 对每跳单独生效,不是总耗时限制
  • Response.content 解析:拿到响应体后调用 .json().text 触发的编码解码、JSON 解析失败,完全不走 timeout 机制

更稳妥的超时组合建议

没有万能值,但可按场景参考:

  • 内网微服务调用:timeout=(0.5, 3) —— 连接必须快,业务允许稍长
  • 公网第三方 API:timeout=(3, 15) —— 容忍网络波动,但防服务端 hang 死
  • 上传大文件(files=...):timeout=(5, 60) —— 发送请求体本身不被 read timeout 管,但服务端处理可能卡住,需拉长 read 值
  • 绝对不能容忍延迟的健康检查:timeout=(1, 1) + allow_redirects=False

真正难处理的是“既要低延迟又要高成功率”的场景——这时候 timeout 只是第一道防线,后面还得配熔断(tenacity)、降级、异步重试,单纯调数字解决不了根本问题。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

772

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

663

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

765

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

679

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1385

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

570

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

751

2023.08.11

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 14.9万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号