twisted的延迟感知分析器

twisted-theseus的Python项目详细描述


https://travis-ci.org/flowroute/twisted-theseus.png

扭曲的忒修斯

一个用于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。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Camera API如何聚焦图像中多边形的中心?   来自Java的spring Filling邮戳模板   java只能编织本地JAR的方面吗?   javajavax。加密。BadPaddingException:解密错误无法解密加密的公钥   从java运行ansibleplaybook   在Java中,如何从不同的偏移量读取大块的字符串文件?   java Android GridView将无法确定正确的位置   executorservice如何使用自动线程管理在Java中实现生产者/消费者   JavaEJB3.1嵌入式API单元测试EJB+JPA实体   API的java输出自动停止   java Checkmarx缺陷解决方案   java缓存,获取最早的元素   WebSphere8中的JavaEJB问题   两个时区之间的java Jodatime时差   Java 8不兼容类型错误   java TableCellEditor:如果按下该键,则清除原始文本;如果没有输入,则保留值