pyList

用Tornado request_time 给页面添加响应时间

在PHP 程序里面经常在页脚看到这些服务器响应时间,在Tornado 下也好实现。

效果参见本站页脚,本站已启用 Memcache 来保存html ,所看到的响应时间是首次响应时间。

Tornado request time

源码

Tornado.web request_time 源码:

def request_time(self):
    """Returns the amount of time it took for this request to execute."""
    if self._finish_time is None:
        return time.time() - self._start_time
    else:
        return self._finish_time - self._start_time

更详细参见 tornado/wsgi.py 3

解析

记录的时间是请求开始处理到现在的时间,而并到达时间到发送时间。因此在并发量过大时,调用接口的代码可能发生超时,而此时间打印出来的时间却不存在超时,因为它不包括在epoll事件队列中的等待时间。

下面为 request_time() 函数原型

class HTTPRequest(object):  
       def __init__(self, method, uri, version="HTTP/1.0", headers=None,  
                 body=None, remote_ip=None, protocol=None, host=None,  
                 files=None, connection=None):  
        ...  
        self._start_time = time.time()  
        self._finish_time = None  
        ...  
         
  
    def request_time(self):  
        """Returns the amount of time it took for this request to execute."""  
        if self._finish_time is None:  
            return time.time() - self._start_time  
        else:  
            return self._finish_time - self._start_time 

其中 self._start_time 是在 HTTPRequest 初始化是被赋值。而初始化的位置就在开始处理数据包的时刻,代码位于 HTTPConnection 类的解析请求头部函数 _on_headers 中。

//HttpServer.py  
class HTTPConnection(object):  
  
    def _on_headers(self, data):  
        try:  
           ...  
  
            self._request = HTTPRequest(  
                connection=self, method=method, uri=uri, version=version,  
                headers=headers, remote_ip=remote_ip)  
  
            ...  
        except _BadRequestException, e:  
            logging.info("Malformed HTTP request from %s: %s",  
                         self.address[0], e)  
            self.close()  
            return  

缺点

因为每次响应的时间有可能不同,tornado 自带的计算页面Etag 就不同,不能给客户端返回304 代码,导致每次请求服务器都计算页面Etag 值,也浪费了一些流量。但实际应用里,很少有用户无聊的刷新单一页面。

本文标签: request Tornado time 页面 添加
本文网址: https://pylist.com/t/1325061467 (转载注明出处)
如果你有任何建议或疑问可以在下面 留言
发表第一条评论!
验证码图片
相关推荐