美文网首页
2018-07-16 执行时间分析

2018-07-16 执行时间分析

作者: AntFish | 来源:发表于2018-07-16 14:58 被阅读0次

    今天刚看到ipython的一个函数执行时间的分析器,非常好用,记录一下。

    安装模块

    pip install line_profiler

    导入模块

    %load_ext line_profiler

    例子

    先定义一个函数:

    def sum_of_lists(n):
         total =0
         for i in range(5):
             l = [j ^ (j >> i) for j in range(n)]
             total += sum(l)
         return tatal
    

    使用line_profiler分析函数执行时间

    %lprun -f sum_of_lists sum_of_lists(5000)
    Timer unit: 2.84444e-07 s
    
    Total time: 0.00461681 s
    File: <ipython-input-40-ce32f0c125bd>
    Function: sum_of_lists at line 1
    
    Line #      Hits         Time  Per Hit   % Time  Line Contents
    ==============================================================
         1                                           def sum_of_lists(n):
         2         1          5.0      5.0      0.0      total =0
         3         6         11.0      1.8      0.1      for i in range(5):
         4         5      15685.0   3137.0     96.6          l = [j ^ (j>>i) for j in range(n) ]
         5         5        529.0    105.8      3.3          total += sum(l)
         6         1          1.0      1.0      0.0      return total
    

    ok,很明显发现绝大部分的时间都发在第4行代码 l = [j ^ (j>>i) for j in range(n) ] 上了。

    pycharm中自带了性能分析工具

    测试函数如下:


    微信图片_20180716151817.png

    在run菜单下选择 profile your_file_name

    微信图片_20180716152001.png

    执行后会生成测试结果。
    Statistcs(性能统计)和Call Graph(调用关系图)
    Statistcs

    1. 表头Name显示被调用的模块或者函数;Call Count显示被调用的次数;Time(ms)显示运行时间和时间百分比,时间单位为毫秒(ms)。

    2. 点击表头上的小三角可以升序或降序排列表格。

    3. 在Name这一个列中双击某一行可以跳转到对应的代码。

    微信图片_20180716152305.png

    Call Graph

    1. 右上角的4个按钮表示放大、缩小、真实大小、合适大小;

    2. 箭头表示调用关系,由调用者指向被调用者;

    3. 矩形的左上角显示模块或者函数的名称,右上角显示被调用的次数;

    4. 矩形中间显示运行时间和时间百分比;

    5. 矩形的颜色表示运行时间或者时间百分比大小的趋势:红色 > 黄绿色 > 绿色


      微信图片_20180716152346.png

    相关文章

      网友评论

          本文标题:2018-07-16 执行时间分析

          本文链接:https://www.haomeiwen.com/subject/zqlbpftx.html