0

0

Python 网络超时是如何触发的?

冷炫風刃

冷炫風刃

发布时间:2026-01-21 15:28:03

|

742人浏览过

|

来源于php中文网

原创

Python网络超时由操作系统在系统调用未完成时返回错误触发,非解释器主动中断;连接超时发生于TCP三次握手阶段,读取超时发生于已连接后等待数据时,DNS解析不属其范畴,且实际耗时可能略超设定值。

python 网络超时是如何触发的?

Python 网络超时由底层 socket 层触发,不是 Python 解释器主动“计时中断”,而是当系统调用(如 connect()recv())在指定时间内未完成时,操作系统返回错误,Python 将其封装为 socket.timeout 或更通用的 TimeoutError 异常。

连接超时(connect timeout)

发生在 TCP 三次握手阶段。调用 socket.connect() 时,若在设定时间内未收到 SYN-ACK 响应,内核返回 ETIMEDOUT(Linux)或 WSAETIMEDOUT(Windows),Python 抛出 socket.timeout

  • 使用 socket.settimeout(n) 设置后,所有阻塞 I/O 操作都受控,包括 connect()
  • 也可用 socket.setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, ...) 单独设接收超时,但不推荐——跨平台行为不一致
  • requests 库中的 timeout=(3, 7) 第一个数字即连接超时,本质是调用底层 socket 的 connect 超时

读取超时(read timeout)

发生在已建立连接后等待数据到达时。例如调用 recv()readline(),若对端迟迟不发数据,且 socket 已设超时,内核在超时后返回 EAGAIN/EWOULDBLOCK,Python 转为 socket.timeout

  • HTTP 长连接中,服务端可能保持连接但延迟发送响应体,此时读取超时会中断等待
  • requests 中 timeout=(3, 7) 的第二个数字即读取超时,覆盖整个响应体接收过程
  • 注意:超时从调用 recv() 开始计,不是从请求发出开始

DNS 解析是否算在网络超时里?

不算。DNS 查询由操作系统或 libc 的 getaddrinfo() 完成,不走 socket 超时机制。它有自己的超时逻辑(如 /etc/resolv.conf 中的 timeout:attempts:),Python 默认不干预。

网奇IOS智能在线订单系统
网奇IOS智能在线订单系统

产品简介: 网奇IOS智能订单系统,是网奇公司研发的一款智能在线订单编辑以及管理系统。本系统适合使用在;在线报名、酒店预定、信息反馈、在线订单和在线投诉等等诸多应用上。本系统所有选项字段完全通过后台控制,在线报名系统可以变为在线预定系统,同时可以变为任何其它的系统,里面的栏目字段,可以任意添加、删除、 修改。本系统为网奇公司全国独家首创,顺应网络需求,安装十分便利,上传即可使用。产品特色:

下载

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

  • requests、urllib 等库发起请求前先做 DNS 解析,若解析卡住,会表现为“连接前就卡住”,但异常类型通常是 gaierrorConnectionError,而非 TimeoutError
  • 可手动用 socket.getaddrinfo(host, port, timeout=5)(Python 3.12+)控制 DNS 超时,旧版本需配合线程/asyncio 实现

超时不是“精确倒计时”

实际耗时可能略超设定值。原因包括:

  • Python 在系统调用返回后才抛异常,而内核定时器精度有限(通常 10–15ms)
  • 线程调度延迟:CPython GIL 切换、系统负载高时,异常抛出可能延后几毫秒到几十毫秒
  • 某些场景(如 HTTPS 握手)涉及多次系统调用,超时是各阶段叠加,非单一计时器

相关专题

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

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

769

2023.06.15

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

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

661

2023.07.20

python能做什么
python能做什么

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

764

2023.07.25

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

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

639

2023.07.31

python教程
python教程

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

1325

2023.08.03

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

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

549

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相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

9

2026.01.21

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

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

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