2011-02-17 82 views

回答

1

你可以写一个装饰:

import datetime 
import cherrypy 

def request_timer(f, *args, **kwargs): 
    def _request_time(f, *args, **kwargs): 
     begin = datetime.datetime.now() 
     response = f(*args, **kwargs) 
     end = datetime.datetime.now() 
     print cherrypy.log('time took for request %s' % (end - begin)) 
     return response 
    return _request_time(f, *args, **kwargs) 

class Root(object): 

    @request_timer 
    def index(*args, **kwargs): 
     pass 
    index.exposed = True 

日志信息会去要么屏幕或您的error_log文件,这取决于您的设置。

+0

我理解这个代码,它的时间有多长,执行公开方法的方式。我想从CherryPy服务器接收请求的位置开始计时,直到它发送响应。我目前正在查看CherryPy源wsgiserver下`HTTPConnection`类的`communicate()`方法。 – luis 2011-02-18 04:53:33

1

这取决于你想要测量什么。如果您只想要处理页面处理程序逻辑,请使用代码Y. H. Wong发布。如果你想为客户看到它测量的总时间,使用类似Apache ab

$ python myproject.py & 
$ ab -n 1000 -c 10 http://localhost:8080/myapp 
+0

这也是我打算使用的方法之一。我实际上试图查看请求在堆栈的每个部分需要多长时间(网络,CherryPy,Cheetah,db等) – luis 2011-02-18 04:55:25