【发布时间】:2025-12-23 17:10:11
【问题描述】:
我有一个 Tornado 应用程序,有时有人添加了一个在不适当的时间阻塞的代码。
如何检测此类函数,甚至记录哪个处理程序/协程方法阻塞的时间超过 50 毫秒?
我正在查看tornado.gen 中的_make_coroutine_wrapper(),除了修改源代码外,没有看到任何插入的方法——这对于一次性调试来说是可以的,但有没有更好的方法?
【问题讨论】:
我有一个 Tornado 应用程序,有时有人添加了一个在不适当的时间阻塞的代码。
如何检测此类函数,甚至记录哪个处理程序/协程方法阻塞的时间超过 50 毫秒?
我正在查看tornado.gen 中的_make_coroutine_wrapper(),除了修改源代码外,没有看到任何插入的方法——这对于一次性调试来说是可以的,但有没有更好的方法?
【问题讨论】:
您可以使用IOLoop.set_blocking_log_threshold 方法。 set_blocking_log_threshold(0.050) 将在 IOLoop 阻塞超过 50 毫秒时打印堆栈跟踪。
【讨论】:
PYTHONASYNCIODEBUG=1,在here中记录