2014-07-21 31 views
1

我寫了一個非常簡單的龍捲風處理程序,旨在測試遠程部署的某些設備的上傳速度。主要測試將在所述遠程設備中運行(感謝cURL),我可以獲得關於上傳所花費的不同時間的詳細報告。我如何在處理程序中對龍捲風處理程序進行基準測試?

龍捲風處理器具有唯一要真正做的是接受字節數的身體(這是相當多了)

class TestUploadHandler(tornado.web.RequestHandler): 
    def post(self): 
     logging.debug("Testing upload") 
     self.write("") 

因此,上述工程的代碼,但它是一種.. 。幾乎可恥:-D爲了讓它更多... 可以顯示,我想展示一些更有用的日誌,例如請求上傳的時間或類似的東西。我不知道...有點多汁。

有沒有什麼方法可以測量龍捲風處理程序本身的上傳速度?我已經搜索瞭如何對Tornado處理程序進行基準測試,但我似乎能夠找到的是不同Web服務器之間的性能比較。

預先感謝您。

+0

你只是想測量'post'方法需要多長時間才能完成? – dano

+0

是的......有些東西不能使處理程序看起來如此......空洞而荒涼。一些有用的指標會很好(例如,請求需要多長時間會很好):-) – BorrajaX

回答

0

嗯,這是相當簡單的時間上傳自己花了多長時間:

import time 

class TestUploadHandler(tornado.web.RequestHandler): 
    def post(self): 
     logging.debug("Testing upload") 
     start = time.time() 
     self.write({}) 
     end = time.time() 
     print "Time to write was {} seconds.".format(end-start) 

你也可以移動的時間碼的裝飾,如果你想在多個處理器來使用它:

from functools import wrap 
import time 

def timer(func): 
    @wraps(func) 
    def wrapper(*args, **kwargs): 
     start = time.time() 
     ret = func(*args, **kwargs) 
     end = time.time() 
     print 'Function took {} seconds'.format(end-start) 
     return ret 
    return wrapper 

class TestUploadHandler(tornado.web.RequestHandler): 
    @timer 
    def post(self): 
     logging.debug("Testing upload") 
     self.write({}) 

編輯:

既然你要衡量多久上傳到服務器在t取他從服務器的角度出發,上述方法並不奏效。它看起來像你可以用龍捲風得到最接近的是使用@tornado.web.stream_request_body裝飾,讓你收到請求主體作爲流:

@tornado.web.stream_request_body 
class ValueHandler(tornado.web.RequestHandler): 
    def initialize(self): 
     self.start = None 

    def post(self): 
     end = time.time() 
     print self.request 
     if self.start: 
      print("Upload time %s" % end-self.start) 
     self.write({}) 

    def data_received(self, data): 
     if not self.start: 
      self.start = time.time() 

當接收到請求主體的第一塊,我們節省了時間(如self.start)。一旦收到完整的主體,將立即調用post方法,因此我們獲得end

雖然,我有問題讓它在大文件上傳時正常工作。不過,對於小文件(小於100MB)似乎還是可以的。

+0

我可能會使用它。裝飾者是一個很好的補充答案。你碰巧知道是否有更多的*次*報告隱藏在'處理程序'或'請求'的某處?我在問,因爲(在客戶端)cURL提供了一個很好的報告(請求何時開始,DNS解析需要多長時間,上傳本身需要多長時間......)我想知道是否有類似的東西在服務器端(我根本不知道)像...... *什麼時候處理程序實例化*或*處理完整的上傳流需要多長時間...... *類似的事情? Thx – BorrajaX

+0

@BorrajaX'RequestHandler'沒有這樣的東西,據我所知。但是,如果使用'tornado.httpclient'發送請求,則您返回的'HTTPResponse'對象將具有['time_info'](http://www.tornadoweb。org/en/stable/httpclient.html?highlight = httprequest#tornado.httpclient.HTTPResponse)屬性,它是診斷時間的字典,它專門用於http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html作爲可用時間的參考。 – dano

+1

等待,一旦處理程序被調用,是不是已經在服務器中的全部身體?這是否意味着'end'和'start'之間的區別幾乎爲零? – BorrajaX

相關問題