2014-07-21 32 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

相关问题