讲师中心 微信公众号
AI工具推荐 视频效率加速

Python 网络超时机制如何设计

星杰小哥_3667

星杰小哥_3667

发布时间:2026-02-18 12:01:20

|

922人浏览过

|

来源于php中文网

原创

requests请求超时必须显式设置,推荐用(timeout_connect, timeout_read)元组如(3,10),避免默认不设超时导致卡死;底层urllib3连接池和aiohttp异步超时需单独配置,全局设timeout风险大。

python 网络超时机制如何设计

requests 请求超时必须显式设置 timeout

Python 的 requests 默认不设超时,卡住就真卡住——比如 DNS 解析失败、服务器不响应、网络中断,requests.get() 可能挂十几分钟不动。这不是 bug,是设计选择,但生产环境绝对不能依赖它。

实操建议:

  • timeout 必须传,且推荐拆成 (connect_timeout, read_timeout) 元组,比如 timeout=(3, 10):3 秒内完成 TCP 连接(含 DNS),10 秒内收完响应体
  • 只传单个数字(如 timeout=5)等价于 (5, 5),对慢接口或大响应不友好
  • 设太短(如 (0.5, 1))容易误杀正常请求;设太长(如 (30, 60))会拖垮整体响应延迟,尤其在并发场景下
  • 注意:超时抛出的是 requests.exceptions.Timeout,不是 Exception,捕获时别用裸 except:

urllib3 底层连接池的 timeout 配置常被忽略

requests 底层用 urllib3,而连接池(PoolManager)自己也有一套超时逻辑。如果你手动复用 session 或自定义 adapter,这里容易漏配。

常见错误现象:设置了 timeout,但某些请求仍长时间阻塞,尤其在高并发复用连接时。

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

实操建议:

  • 若用 requests.Session(),可通过 session.mount('https://', requests.adapters.HTTPAdapter(pool_connections=10, pool_maxsize=20)) 控制连接池大小,但真正影响超时的是 urllib3 的 PoolManager 参数
  • 要精细控制底层行为,可直接构造 urllib3.PoolManager,传入 timeout=urllib3.util.Timeout(connect=3, read=10)
  • 默认情况下,urllib3 的 timeout 是 None,即不生效;只有上层 requests 的 timeout 参数才会透传并覆盖它

异步请求(aiohttp)的 timeout 机制完全不同

aiohttp 不是 requests 的异步版,它的超时是基于 asyncio event loop 的,配置位置和语义都不同,混用会出问题。

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载

使用场景:需要并发发几百个请求,又不想被某个慢接口拖死整个协程。

实操建议:

  • aiohttp.ClientSession 的 timeout 参数类型是 aiohttp.ClientTimeout,必须显式构造,比如 ClientTimeout(total=15, connect=3, sock_read=10)
  • total 是整个请求生命周期上限,会强制 cancel 协程;connect 和 sock_read 是子阶段超时,更细粒度
  • 注意:如果没设 total,仅设 connect 或 sock_read,一旦 DNS 卡住或服务端迟迟不发响应头,协程仍可能 hang 住
  • 错误信息如 asyncio.TimeoutError 或 aiohttp.ServerTimeoutError,需分别捕获

全局默认 timeout 容易掩盖问题

有人想“一劳永逸”,在 requests.adapters.DEFAULT_TIMEOUT 上改值,或 monkey patch requests.request。这看似省事,实际埋雷。

为什么这样做风险大:

  • 第三方库(如 botocore、elasticsearch-py)内部也用 requests,你的全局改动会影响它们的行为,导致不可预期的失败
  • 不同接口对延迟容忍度差异极大:查缓存可以 100ms 超时,调下游支付网关可能要留 5s,统一设一个值等于放弃治理
  • 测试环境 mock 接口响应快,上线后才暴露超时不合理,问题滞后

真正该做的是:每个业务请求点明确声明 timeout,配合监控看 requests.exceptions.Timeout 出现频次和分布,再反推调优。

最麻烦的点往往不在 timeout 值本身,而在超时之后要不要重试、重试几次、间隔怎么设——这部分逻辑必须和具体业务状态耦合,没法通用化。

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

相关专题

更多
session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

580

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

876

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

1926

2025.08.19

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3188

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

5129

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3829

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

486

2026.01.19

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5490

2024.08.16

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

40

2026.10.28

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn