python requests模块中返回时间elapsed解析
一、问题:
Python 中requests库在发送http请求时相当方便好用,但在使用时一直受一个问题困扰,怎么才能查看请求时长呢?
自己写时间函数再相减?NO,这个方法肯定不行。
二、解决:
好吧。我们还是看看requests管方文档,功夫不负有心人,管网API竟然后介绍是:
elapsed = None
The amount of time elapsed between sending the request and the arrival of the response (as a timedelta). This property specifically measures the time taken between sending the first byte of the request and finishing parsing the headers. It is therefore unaffected by consuming the response content or the value of the stream keyword argument.
看不懂吧,切完回requests中文文档,Opps,没有翻译,只能靠自己了。
中文大致理解如下:
在发送请求和响应到达之前耗费的时间差(timedelta),指发送第一个byte数据头至处更完最后一个数据头之间,所以这个时长不受相应的内容影响。
看完后,是不是还云里雾里,没关系,我们看看源码,requests对elapsed方法的源码如下:
# Get the appropriate adapter to use
adapter = self.get_adapter(url=request.url) # Start time (approximately) of the request
start = datetime.utcnow() # Send the request
r = adapter.send(request, **kwargs) # Total elapsed time of the request (approximately)
r.elapsed = datetime.utcnow() - start
从源码中我们可以看到使用的datetime函数来计算时间差。
datetime是什么?不懂,来看文档吧。
classmethod datetime.utcnow()
Return the current UTC date and time, with tzinfo None. This is like now(), but returns the current UTC date and time, as a naive datetime object. See also now().
返回UTC日期和时间,UTC是什么?看看解释:Coordinated Universal Time 世界统一时间,世界标准时间
所以,你不用担心你发的请求的客户端与服务器时间不一致这种问题。
三:深入理解:
最后,问题来了,返回的时间是什么单位呢?
我们自己写个脚本就什么都知道了:
import datetime
import time
a=datetime.datetime.now()
time.sleep(0.1) #睡眠0.1秒
b=datetime.datetime.now()
print b-a
结果为:
>>>
0:00:00.100000
所以,得知,单位为微秒、微秒、
四:对比
既然知道了使用,那么,你肯定会问,这个时间准吗?
我们用jmeter来对比,访问baidu
jmeter配置如下:

运行结果的聚合报告我们看看:

结果为204ms
我们再次用requests来试试,代码如下:
import requests
r=requests.get('http://www.baidu.com')
print r.elapsed.microseconds/1000.
结果:
>>>
138.0
138ms
结果差不多。
这里我又试了内部系统真正的的接口数据


可以得知,差距不太大,数据我们可以还是有参考价值的。
参考:
Requests文档:http://cn.python-requests.org/zh_CN/latest/api.html?highlight=elapsed#requests.Response.elapsed
datatime文档:https://docs.python.org/2.7/library/datetime.html?highlight=datetime#module-datetime
其它解释:http://bbs.csdn.net/topics/390898823
python requests模块中返回时间elapsed解析的更多相关文章
- 使用python requests模块搭建http load压测环境
网上开源的压力测试工具超级的多,但是总有一些功能不是很符合自己预期的,于是自己动手搭建了一个简单的http load的压测环境 1.首先从最简单的http环境着手,当你在浏览器上输入了http://w ...
- python 之模块之 xml.dom.minidom解析xml
# -*- coding: cp936 -*- #python 27 #xiaodeng #python 之模块之 xml.dom.minidom解析xml #http://www.cnblogs.c ...
- python requests模块session的使用建议及整个会话中的所有cookie的方法
话不多说,直接上代码 测试代码 服务端 下面是用flask做的一个服务端,用来设置cookie以及打印请求时的请求头 # -*- coding: utf-8 -*- from flask import ...
- Python requests模块解析XML
检查QQ是否在线(api感觉不准) import requests from xml.etree import ElementTree qq_str = input('please input the ...
- Python—requests模块详解
1.模块说明 requests是使用Apache2 licensed 许可证的HTTP库. 用python编写. 比urllib2模块更简洁. Request支持HTTP连接保持和连接池,支持使用co ...
- Python requests模块学习笔记
目录 Requests模块说明 Requests模块安装 Requests模块简单入门 Requests示例 参考文档 1.Requests模块说明 Requests 是使用 Apache2 Li ...
- Python Requests模块讲解4
高级用法 会话对象 请求与响应对象 Prepared Requests SSL证书验证 响应体内容工作流 保持活动状态(持久连接) 流式上传 块编码请求 POST Multiple Multipart ...
- 使用monkey技术修改python requests模块
例如请求前和请求后各来一条日志,这样就不需要在自己的每个代码都去加日志了. 其实也可以直接记录'urllib3.connectionpool' logger name的日志. 修改了requests ...
- Python multiprocess模块(中)
主要内容: 一. 锁 二. 信号量 三. 事件 通过event来完成红绿灯模型 四. 队列(重点) 队列实现进程间的通信 五. 生产者消费者模型 1. 初始版本(程序会阻塞住) 2. 升级版本一(通过 ...
随机推荐
- UNIX环境编程学习笔记(8)——文件I/O之校验当前登录用户对文件的访问权限
lienhua342014-09-03 通过前面一篇随笔(文件访问权限与进程访问控制),我们知道内核校验文件的访问权限使用的是进程的有效用户 ID 和有效组 ID.但有时我们需要知道当前登录用户对某个 ...
- Vi编辑器修改文件.bash_profile可解决backspace出现乱码问题,rlwrap 的安装。
Vi编辑器修改文件.bash_profile可解决backspace出现乱码问题 使用SecureCRT或是pietty_ch连接到一台安装有Oracle DB 10g的RHEL4.2的机器,linu ...
- Node.js之exports与module.exports
每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {} module.exports = {}; Node.js为了方 ...
- Blender 移动、旋转、缩放
1.手动调整物体的属性 当我们添加了一个物体后,例如一个Torus物体. 在左侧下角部分能看到“Add Torus”面板,面板包含了Locatin.Rotation.Major Segments.Mi ...
- opencv在同一窗口打印多张图片
首先,由于cv2处理的图片是通过ndarray的格式操作的,也就是说通过array的拼接就可以实现图片的拼接,那么之后就可以通过简单的imshow将合并的图片打印从而达到在一个窗口中显示多张图片的目的 ...
- Elastic-Job原理分析(version:2.1.4)
当当的Elastic-Job开源出了两种分布式Job的解决方案:1. elastic-job-lite,这是一个无中心节点的调度: Elastic-Job-Lite定位为轻量级无中心化解决方案,使用j ...
- Linux+Redis实战教程_day01_Linux系统上安装tomcat
Linux系统上安装tomcat 安装tomcat 上传tomcat的安装文件 Alt+p 拖拽上传 创建tomcat的安装路径 mkdir -p /usr/local/tomcat 解压tomcat ...
- 使用webbench做压力测试
Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.下文介绍的是在Ubu ...
- Python 文件学习笔记
程序1 在上一题的基础上扩展,用户可以随意输入要显示的行数. 如输入2:5表示打印第2行到第5行的内容: 输入:2表示打印从开头到第2行的内容: 输入4:表示打印从第4行到结尾的内容: 输入:表示打印 ...
- 【NodeJS】热更新
1.npm install -g supervisor 2.supervisor WellDetect.js