数据可视化

---恢复内容开始---

不断降低hit数,运行时间,以及其他性能指标
根据眼前的性能分析结果,很难观察整个程序的全貌。如果系统在复杂一点,要从全局观察性能分析就会更加困难。
通过一些工具快速定位问题,解决性能瓶颈

可视化工具

KCacheGrind/pyprof2calltree:    这套组合工具可以把cProfile的输出结果转换为KCacheGrind支持的格式,帮助我们实现数据可视化
RunSnakeRun:可以把cProfile的输出结果可视化。它还带有方块图和可排序的列表
KCacheGrind/pyprof2calltree
pip install pyprof2calltree
1:    ubuntu    ---->    sudo apt-get install qcachegrind
2:    windows    ---->    http://sourceforge.net/projects/qcachegrindwin
3:    mac        ---->    brew    install        qcachegrind

pyprof2calltree模块用法

1、通过命令行参数
    pyprof2calltree -o [output-file-name] -i input-file.prof
    usage: pyprof2calltree [-h] [-o output_file_path] [-i input_file_path] [-k]     [-r ...]
                -k    如果想立刻运行Kcachegrind
                -r    如果还没有性能分析数据,可以利用这个参数直接分析脚本文件生成最终结果
            推荐直接-r

2、在REPL交互式编程环境里运行。
    from xml.etree import ElementTree
    from cProfile import Profile
    import pstats
    xml_content = '<a>\n' + '\t<b/><c><d>text</d></c>\n' * 100 + '</a>'
    profiler = Profile()
    profiler.runctx(
    "ElementTree.fromstring(xml_content)",
    locals(), globals())

    from pyprof2calltree import convert, visualize
    stats = pstats.Stats(profiler)
    visualize(stats)      # run kcachegrind

 

Incl列:表示函数的累计消耗时间。就是说它会把函数消耗的时间和其他被它调用的函数消耗的时间加起来统计。如果在这一列中函数消耗的时间很高,
                  并不一定是这个函数消耗的时间很长,也可能是它调用的函数运行时间很长 Self列:只包含函数本身消耗的时间,不包括它调用的函数需要的时间
函数关系调用图:
    函数调用的具体过程;调用的次数。

 

RunSnakeRun
RunSnakeRun是KCacheGrind的简化版,KCacheGrind同样适用于C,C++,而RunSnakeRun是专门为python开发者定制的。
目前尚不支持py3
    -     apt-get install python-profiler python-wxgtk3.0 python-setuptools
    -    pip install -U wxPython    
    -    pip install SquareMap RunSnakeRun
提供的功能
    1、可排序的网络视图
        函数名称
        总调用数
        累计时间
        文件名和行号
    2、函数的具体调用信息,比如函数的调用者和被调用者名称
    3、面积与函数运行时间成正比的方块图
    
使用方法:
    python -m cProfile -o xxxxx.prof index.py
    runsnake xxxxx.prof
                            
    会有三个区域:
        可排序区域        ;输出的所有数据
        函数详细信息区域:包含了调用函数(Callers)、被调用函数(Callees)和源代码(Source code)
        方块图区域        :用图形显示运行的函数调用关系树    
posted @ 2018-12-28 13:53  慕沁  阅读(526)  评论(0)    收藏  举报