2017-04-06 189 views
2

創建requests後請求這樣的,我在那裏指定超時閾值:如何測量Python請求的服務器響應時間POST請求?

response = requests.post(url, data=post_fields, timeout=timeout)

然而,要確定一個「好」的閾值,我想標杆服務器的響應時間提前。

如何計算服務器的最小和最大響應時間?

+0

查看'contextmanager'你可以將它包裝在一個簡單的函數中,該函數需要經過的時間,而不必編寫一個全新的裝飾器 –

回答

3

Response對象由requests.post()返回有一個屬性稱爲elapsed,它給出Request之間的時間差值被髮送,並且收到Response。要獲得的秒數,使用total_seconds()方法:

response = requests.post(url, data=post_fields, timeout=timeout) 
print(response.elapsed.total_seconds()) 

應當提及的是requests.post()是同步操作,這意味着它「塊」,直到響應被接收。

2

這取決於您是否可以通過大量測試請求來訪問服務器,或者您是否需要等待真正的請求發生。

如果你需要真正的請求數據,那麼你需要換通話,以確定每個請求的時間:

start = time.clock() 
response = requests.post(url, data=post_fields, timeout=timeout) 
request_time = time.clock() - start 
self.logger.info("Request completed in {0:.0f}ms".format(request_time) 
#store request_time in persistent data store 

你會需要的地方每個請求的結果存儲在一段時間(文件,數據庫等)。然後,您可以計算響應時間的統計信息。

如果你有一個測試服務器可用,你可以基準,而無需使用類似apachebench蟒蛇併爲每個請求發送測試數據的響應:

https://gist.github.com/kelvinn/6a1c51b8976acf25bd78