tornado--打印block日志

来源:互联网 发布:java程序调试的步骤 编辑:程序博客网 时间:2024/06/07 02:48

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秒,就会打印该请求的栈。