You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询python-requests两种请求时间测量方法差异巨大的原因

为什么time.time()和r.elapsed的耗时差这么多?

这俩值差这么大,核心原因是它们测量的完全不是同一个阶段的耗时!咱们一步步拆解清楚:

1. time.time() - start:你感知到的「完整总耗时」

这个值是从你代码执行start = time.time()开始,到end = time.time()结束的全部时间,包含了requests.get()执行过程中所有环节的耗时:

  • DNS域名解析(把网址转成服务器IP的过程)
  • 和目标服务器建立TCP连接(包括三次握手、SSL加密握手,如果是HTTPS的话)
  • 等待服务器处理你的请求、准备响应
  • 把响应内容完整下载到本地
  • 甚至requests库内部的一些初始化、数据处理小步骤

你在Chrome里看到的实际耗时,就和这个值对应——浏览器显示的页面加载时间,也是从发起请求开始,到所有资源加载完成的完整时间,逻辑完全一致。

2. r.elapsed:服务器处理请求的「核心耗时」

requests库的r.elapsed属性,只记录从HTTP请求正式发送给服务器,到完整接收响应内容的时间,它完全不包含DNS解析、TCP连接建立这些前置环节的耗时。

在你的案例里,0.63秒是服务器实际处理请求并返回响应的速度,剩下的64秒左右,全花在了DNS解析、建立连接这些“准备工作”上(大概率是你的网络环境里DNS解析很慢,或者连接目标服务器时等待时间过长)。

怎么验证这个结论?

你可以用细粒度计时拆分各个阶段,看看哪部分拖了后腿:

import requests
import time
import socket

# 单独测DNS解析时间
start_dns = time.time()
socket.gethostbyname("www.dl.soc.i.kyoto-u.ac.jp")
end_dns = time.time()
print(f"DNS解析耗时: {end_dns - start_dns:.2f}秒")

# 测完整请求的总耗时
start_total = time.time()
r = requests.get("https://www.dl.soc.i.kyoto-u.ac.jp/index.php/members/")
end_total = time.time()
print(f"总耗时: {end_total - start_total:.2f}秒")
print(f"服务器处理核心耗时(elapsed): {r.elapsed.total_seconds():.2f}秒")

运行后你会发现,DNS解析的时间加上r.elapsed的时间,基本和总耗时接近,就能实锤是前置环节拖了后腿。

想要和Chrome一致的总耗时?

继续用time.time()(或者更精确的time.perf_counter())包裹整个请求过程就好,这就是最贴近你实际感知的完整耗时。


内容的提问来源于stack exchange,提问作者AnxietyMonger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:10:53