引言
本篇文章分享一下如何获取 Requests 请求的响应时间。
获取响应时间
说到获取响应时间,大家首先会想到计时,可能会写出以下代码:
import time
from contextlib import contextmanager
import requests
@contextmanager
def timer():
t = time.time()
yield
print(f'运行时间为:{time.time() - t:.4f}s')
with timer() as t:
r = requests.get("http://www.python.org")
print(r.status_code)
虽然说也能很方便的获取到响应时间,但是还是要写额外的代码,其实 Requests 本身自带了计时器,每个请求都会记录请求的响应时间,话不多说,直接上代码,响应对象中,有一个 elapsed
属性,可以直接输出它来获取响应时间。
import requests
r = requests.get("http://www.python.org")
print(r.status_code)
print(r.elapsed)
print(r.elapsed.total_seconds())
print(r.elapsed.seconds)
print(r.elapsed.microseconds)
print(r.elapsed.days)
运行结果:
200
0:00:00.684367
0.684367
0
684367
0
elapsed 属性是一个 datetime.timedelta
类型的值,可以转换成秒,微妙,天等类型的时间类型。
获取响应时间源码
从源码看,响应对象中,有一个 elapsed
属性,在构造函数中初始化成了 datetime.timedelta(0)
在 requests.adapters.BaseAdapter.send
方法中,在发送请求之前启用了计时器,在收到响应之后,停止计时器,将时间的差值赋值给 elapsed
属性,从而获取当前响应的响应时间。
总结
在本篇文章中,我们了解了如何在使用 Requests 时获取响应时间。除了自己编写计时器外,利用 Requests 自带的 elapsed
属性可以更加方便和直观地完成这一任务。此外,通过对源码的简单分析,我们也理解了 elapsed
属性的实现原理,这不仅有助于我们高效地使用 Requests,还能加深对其内部机制的认识。
希望本文能够帮助大家在日常开发中更好地掌握和运用 Requests。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。