【问题标题】:How do I detect long blocking functions in Tornado application如何在 Tornado 应用程序中检测长阻塞函数
【发布时间】:2025-12-23 17:10:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: python profiling tornado


    【解决方案1】:

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

    【讨论】:

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