嗯,這是相當簡單的時間上傳自己花了多長時間:
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