当前位置: 首页 > news >正文

response对象的elapsed属性

在Python的requests库中,当我们发送一个请求后,会得到一个Response对象,这个对象有一个elapsed属性,它返回一个timedelta对象,表示从发送请求到收到响应所经过的时间。

response.elapsed.total_seconds() 是 Python requests 库中的一个方法,用于获取 HTTP 请求从发送到接收响应所花费的总时间(以秒为单位,浮点数形式)。以下是具体用法和示例:


基本用法

import requestsresponse = requests.get("https://www.example.com")
elapsed_time = response.elapsed.total_seconds()  # 获取请求耗时(秒)
print(f"请求耗时: {elapsed_time} 秒")

完整示例

1. 测量请求耗时并处理超时

import requestsurl = "https://www.example.com"
try:response = requests.get(url, timeout=5)  # 设置超时时间为5秒elapsed = response.elapsed.total_seconds()print(f"请求成功!状态码: {response.status_code}, 耗时: {elapsed:.3f} 秒")
except requests.exceptions.Timeout:print("请求超时!")
except requests.exceptions.RequestException as e:print(f"请求失败: {e}")

2. 比较多个请求的耗时

import requestsurls = ["https://www.google.com","https://www.github.com","https://www.python.org"
]for url in urls:try:response = requests.get(url)elapsed = response.elapsed.total_seconds()print(f"{url} 耗时: {elapsed:.2f} 秒")except Exception as e:print(f"{url} 请求出错: {e}")

3. 结合性能测试(计算平均耗时)

import requests
import statisticsurl = "https://www.example.com"
times = []for _ in range(5):  # 发送5次请求,计算平均耗时response = requests.get(url)times.append(response.elapsed.total_seconds())avg_time = statistics.mean(times)
print(f"平均耗时: {avg_time:.3f} 秒")

elapsed时间包括请求发送、服务器处理以及响应返回的时间,但不包括DNS解析、连接池等待等时间(实际上,elapsed是从发送请求开始到响应返回为止的时间,包括连接建立的时间,如果连接是新建的,则包括DNS解析和TCP连接建立的时间。但是,如果使用了会话(Session)并且连接是复用的,那么elapsed就不包括连接建立的时间)。


关键说明

  1. response.elapsed 是一个 datetime.timedelta 对象,total_seconds() 将其转换为秒。
  2. 适用场景​:性能监控、API响应时间分析、超时处理等。
  3. 注意事项​:
    • 如果请求失败(如超时或网络错误),response 对象可能不存在,需配合异常处理使用。
    • 时间不包括DNS解析、TCP连接等底层网络开销,仅测量从发送请求到接收第一个字节的时间。

输出示例

请求成功!状态码: 200, 耗时: 0.452 秒
https://www.google.com 耗时: 0.32 秒
https://www.github.com 耗时: 0.87 秒
平均耗时: 0.512 秒

通过这种方法,你可以方便地监控和优化请求性能。

什么是elapsed属性?

在Python的requests库中,elapsed是一个属性,它返回一个timedelta对象,表示从发送HTTP请求到接收到响应所经过的时间。

import requests# 发送HTTP请求
response = requests.get('https://www.baidu.com')# 获取响应时间
response_time = response.elapsed
print(f"响应时间: {response_time}")
print(f"总秒数: {response_time.total_seconds()}秒")# 响应时间: 0:00:00.062012
# 总秒数: 0.062012秒

elapsed属性非常有用,特别是在需要监控API性能或确保服务响应时间符合SLA(服务级别协议)时。

理解timedelta对象

timedelta是Python datetime模块中的一个类,用于表示时间间隔或持续时间

timedelta的主要属性:

  • days - 天数
  • seconds - 秒数(不包括天数部分)
  • microseconds - 微秒数(不包括天数和秒数部分)

常用的方法:

  • total_seconds() - 返回总秒数(包括天、秒和微秒转换后的秒数)
from datetime import timedelta# 创建timedelta对象
delta = timedelta(days=1, hours=3, minutes=30, seconds=15)print(f"天数: {delta.days}")
print(f"秒数: {delta.seconds}") # 输出: 12615 (3 * 3600 + 30 * 60 + 15)
print(f"总秒数: {delta.total_seconds()}") # 输出: 99015.0 (86400 + 12615)# 天数: 1
# 秒数: 12615
# 总秒数: 99015.0

elapsed与timedelta的实际应用

在HTTP请求中,response.elapsed返回一个timedelta对象,我们可以使用它来:

  1. 检查响应时间是否在可接受范围内
  2. 记录API性能指标
  3. 设置超时阈值
  4. 比较不同端点或服务的性能
import requestsresponse = requests.get('https://www.baidu.com')# 断言响应时间小于1秒
assert response.elapsed.total_seconds() < 1.0, f"响应时间过长: {response.elapsed.total_seconds()}秒"# 记录响应时间
print(f"请求完成,耗时: {response.elapsed.total_seconds():.3f}秒")# 获取详细的各部分时间
print(f"天数: {response.elapsed.days}")
print(f"秒数: {response.elapsed.seconds}")
print(f"微秒数: {response.elapsed.microseconds}")
print(f"总秒数: {response.elapsed.total_seconds()}")
# 请求完成,耗时: 0.046秒
# 天数: 0
# 秒数: 0
# 微秒数: 45978
# 总秒数: 0.045978

http://www.xdnf.cn/news/1358731.html

相关文章:

  • Elasticsearch Ruby 客户端故障排查实战指南
  • Bright Data MCP:突破AI数据获取限制的革命性工具
  • 阿里云 OSS 前端直传实战:表单上传 + Policy 模式详解
  • GD32VW553-IOT 测评和vscode开发环境搭建
  • 硬件开发_基于物联网的宠物猫饲养系统
  • 互联网大厂Java面试模拟:核心技术点深度解析
  • 极验demo(float)(二)
  • 从字节码层面剖析以太坊智能合约创建原理
  • EXCEL实现复制后倒序粘贴
  • 从Android到鸿蒙:一场本应无缝的转型-优雅草卓伊凡
  • iptables 防火墙核心知识梳理(附实操指南)
  • 【文献阅读】Land degradation drivers of anthropogenic sand and dust storms
  • 《一次高并发场景下疑难Bug的深度排查与复盘》
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十七)设置主题
  • AI代码生成器全面评测:六个月、500小时测试揭示最强开发助手
  • CI/CD持续集成及持续交付详解
  • 户外广告牌识别误报率↓79%!陌讯多模态融合算法在城市广告合规监测的实战解析
  • TEE-可信执行环境
  • 程序里的依赖和中间件的依赖冲突,怎么解决
  • C++20: std::span
  • 多线程下单例如何保证
  • elasticsearch 7.x elasticsearch是查询的数据量大于10000分页有问题还是es的库总量大于10000分页有?
  • 【软件安全】ARM64、x86、32 位与 64 位架构的区别、定义、应用背景
  • 安装gitlab
  • Dify 从入门到精通(第 53/100 篇):Dify 的分布式架构(进阶篇)
  • 线程整理文档
  • git学习
  • Wagtail CRX 的 Latest Pages Block 高级设置 模版v3.0 以后被阉割了
  • Vue vs React:前端框架的差异与选择
  • 【SpringBoot集成篇】SpringBoot 深度集成 Elasticsearch 搜索引擎指南