26.5. hotshot — 高性能日志分析器 — Python 文档

来自菜鸟教程
Python/docs/2.7/library/hotshot
跳转至:导航、​搜索

26.5. 帅哥 — 高性能日志分析器

2.2 版中的新功能。


该模块为 _hotshot C 模块提供了更好的接口。 Hotshot 是现有 profile 模块的替代品。 由于它主要是用 C 编写的,因此它对性能的影响应该比现有的 profile 模块小得多。

笔记

hotshot 模块专注于最小化分析时的开销,代价是数据后处理时间过长。 对于常见用法,建议改用 cProfile。 hotshot 未维护,将来可能会从标准库中删除。


2.5 版更改: 结果应该比过去更有意义:计时核心包含一个关键错误。


笔记

hotshot 分析器还不能很好地处理线程。 如果可能的话,使用非线程脚本在您有兴趣测量的代码上运行分析器很有用。


class hotshot.Profile(logfile[, lineevents[, linetimings]])
探查器对象。 参数 logfile 是用于记录的配置文件数据的日志文件的名称。 参数 lineevents 指定是为每个源代码行生成事件,还是仅在函数调用/返回时生成事件。 默认为 0(仅记录函数调用/返回)。 参数 linetimings 指定是否记录计时信息。 默认为 1(存储时序信息)。

26.5.1. 配置文件对象

Profile 对象有以下方法:

Profile.addinfo(key, value)
将任意标记值添加到配置文件输出中。
Profile.close()
关闭日志文件并终止分析器。
Profile.fileno()
返回探查器日志文件的文件描述符。
Profile.run(cmd)
在脚本环境中分析 exec 兼容的字符串。 __main__ 模块中的全局变量用作脚本的全局变量和局部变量。
Profile.runcall(func, *args, **keywords)
分析可调用的单个调用。 可以传递额外的位置和关键字参数; 返回调用的结果,并允许异常干净地传播,同时确保在退出时禁用分析。
Profile.runctx(cmd, globals, locals)
在特定环境中评估 exec 兼容的字符串。 在分析开始之前编译字符串。
Profile.start()
启动分析器。
Profile.stop()
停止分析器。


26.5.2. 使用热点数据

2.2 版中的新功能。


该模块将热点分析数据加载到标准 pstats Stats 对象中。

hotshot.stats.load(filename)
从 文件名 加载热点数据。 返回 pstats.Stats 类的实例。

也可以看看

模块简介
profile 模块的 Stats 类


26.5.3. 示例用法

请注意,此示例运行 Python“基准”pystones。 运行可能需要一些时间,并且会产生很大的输出文件。

>>> import hotshot, hotshot.stats, test.pystone
>>> prof = hotshot.Profile("stones.prof")
>>> benchtime, stones = prof.runcall(test.pystone.pystones)
>>> prof.close()
>>> stats = hotshot.stats.load("stones.prof")
>>> stats.strip_dirs()
>>> stats.sort_stats('time', 'calls')
>>> stats.print_stats(20)
         850004 function calls in 10.090 CPU seconds

   Ordered by: internal time, call count

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    3.295    3.295   10.090   10.090 pystone.py:79(Proc0)
   150000    1.315    0.000    1.315    0.000 pystone.py:203(Proc7)
    50000    1.313    0.000    1.463    0.000 pystone.py:229(Func2)
 .
 .
 .