twisted的延迟感知分析器
twisted-theseus的Python项目详细描述
扭曲的忒修斯
一个用于python代码的Deferred感知分析器。
虽然cProfile是一个非常有用的实用工具, 它仅限于记录synchronous执行时间。 返回延迟的函数通常会很快返回, 虽然延迟的返回可能在几秒钟甚至几分钟内都不会触发。 这就是忒修斯进来的地方: 任何返回延迟的函数都将被忒修斯跟踪。 将测量从延迟返回到触发的时间, 并与函数的调用堆栈一起记录。
使用量
忒修斯的公共接口是一个名为Tracer的类。 开始:
from theseus import Tracer t = Tracer() t.install()
这足以开始跟踪执行。 最后,必须将统计数据写入磁盘:
with open('callgrind.theseus', 'wb') as outfile: t.write_data(outfile)
输出是用callgrind format写的, 这意味着可以使用标准工具来解释结果, 例如kcachegrind。
如果在任何时候Tracer不再有用, 可以卸载它以停止跟踪:
t.uninstall()
另外, 忒修斯知道inlineCallbacks, 并将重写调用堆栈以使其看起来“正确”。 例如, 给定此代码:
from twisted.internet import defer, task @defer.inlineCallbacks def func(reactor): yield task.deferLater(reactor, 1, lambda: None) task.react(func)
根据theseus的调用堆栈将如下所示(最近的最后一次调用):
__main__ in <module> twisted.internet.task in react __main__ in func
而忒修斯和克罗菲尔都使用profile hook, 只要先安装cprofile, 两个探查器都可以同时使用。 在这种情况下, 调用uninstall()将还原cprofile。