嗯,这是相当简单的时间上传自己花了多长时间:
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)似乎还是可以的。
你只是想测量'post'方法需要多长时间才能完成? – dano
是的......有些东西不能使处理程序看起来如此......空洞而荒凉。一些有用的指标会很好(例如,请求需要多长时间会很好):-) – BorrajaX