Tornado–打印block日志
Tornado在使用过程,碰到过性能瓶颈。 当碰到Tornado中有比较耗时的任务的时候,请求一多就会阻塞整个服务。这个时候就需要查看到底是什么任务阻塞了服务,然后针对性的进行优化。
Tornado使用logging打印日志,我们可以指定当某个请求的处理时间超过设定时间的时候,打印这个请求的stack trace。
源码如下:
def set_blocking_log_threshold(self, seconds):
"""Logs a stack trace if the `IOLoop` is blocked for more than
``s`` seconds.
Equivalent to ``set_blocking_signal_threshold(seconds,
self.log_stack)``
"""
self.set_blocking_signal_threshold(seconds, self.log_stack)
如何使用呢,只需要在启动服务的时候设置block的时间即可,如下所示:
if __name__ == '__main__':
app = create_app()
server = tornado.httpserver.HTTPServer(app)
server.listen(options.port)
io_loop = tornado.ioloop.IOLoop.instance()
io_loop.set_blocking_log_threshold(0.5)
io_loop.start()
如果某个请求的处理时间超过0.5秒,就会打印该请求的栈。