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

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

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

2.2 版中的新功能。


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

笔记

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


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)
 .
 .
 .