如何在 Tornado 应用程序中检测长阻塞函数

Posted

技术标签:

【中文标题】如何在 Tornado 应用程序中检测长阻塞函数【英文标题】:How do I detect long blocking functions in Tornado application 【发布时间】:2014-10-29 18:40:19 【问题描述】:

我有一个 Tornado 应用程序,有时有人添加了一个在不适当的时间阻塞的代码。

如何检测此类函数,甚至记录哪个处理程序/协程方法阻塞的时间超过 50 毫秒?

我正在查看tornado.gen 中的_make_coroutine_wrapper(),除了修改源代码外,没有看到任何插入的方法——这对于一次性调试来说是可以的,但有没有更好的方法?

【问题讨论】:

【参考方案1】:

您可以使用IOLoop.set_blocking_log_threshold 方法。 set_blocking_log_threshold(0.050) 将在 IOLoop 阻塞超过 50 毫秒时打印堆栈跟踪。

【讨论】:

Tornado 似乎不再支持此功能。有人找到替代品了吗? 如Tornado 5.1 docs中所述,此方法的替换是环境变量PYTHONASYNCIODEBUG=1,在here中记录

以上是关于如何在 Tornado 应用程序中检测长阻塞函数的主要内容,如果未能解决你的问题,请参考以下文章

利用tornado使请求实现异步非阻塞

Tornado

Tornado web框架

tornado之异步web服务一

Python Tornado Websocket 处理程序在接收数据时阻塞

1Python全栈之路系列之Tornado Web框架