python requests模塊中返回時間elapsed解析

1、問題:html

Python 中requests庫在發送http請求時至關方便好用,但在使用時一直受一個問題困擾,怎麼才能查看請求時長呢?python

本身寫時間函數再相減?NO,這個方法確定不行。api

2、解決:服務器

好吧。咱們仍是看看requests管方文檔,功夫不負有心人,管網API居然後介紹是:app

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,沒有翻譯,只能靠本身了。函數

中文大體理解以下:url

在發送請求和響應到達以前耗費的時間差(timedelta),指發送第一個byte數據頭至處更完最後一個數據頭之間,因此這個時長不受相應的內容影響。spa

 

看完後,是否是還雲裏霧裏,不要緊,咱們看看源碼,requests對elapsed方法的源碼以下:.net

        # 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

相關文章
相關標籤/搜索