zoukankan      html  css  js  c++  java
  • Python的7种性能测试工具:timeit、profile、cProfile、line_profiler、memory_profiler、PyCharm图形化性能测试工具、objgraph

    https://blog.csdn.net/xiemanr/article/details/72763234

    1.timeit:

    >>> import timeit
    >>> def fun():
        for i in range(100000):
            a = i * i
    
    >>> timeit.timeit('fun()', 'from __main__ import fun', number=1)
    0.02922706632834235
    >>>  

    timeit只输出被测试代码的总运行时间,单位为秒,没有详细的统计。

    2.profile

    profile:纯Python实现的性能测试模块,接口和cProfile一样。

    >>> import profile
    >>> def fun():
       for i in range(100000):
          a = i * i
    
          
    
    >>> profile.run('fun()')
             5 function calls in 0.031 seconds
    
       Ordered by: standard name
    
       ncalls  tottime  percall  cumtime  percall filename:lineno(function)
            1    0.000    0.000    0.016    0.016 :0(exec)
            1    0.016    0.016    0.016    0.016 :0(setprofile)
            1    0.016    0.016    0.016    0.016 <pyshell#13>:1(fun)
            1    0.000    0.000    0.016    0.016 <string>:1(<module>)
            1    0.000    0.000    0.031    0.031 profile:0(fun())
            0    0.000             0.000          profile:0(profiler)
    
    
    >>> 

    ncall:函数运行次数

    tottime: 函数的总的运行时间,减去函数中调用子函数的运行时间

    第一个percall:percall = tottime / nclall 

    cumtime:函数及其所有子函数调整的运行时间,也就是函数开始调用到结束的时间。

    第二个percall:percall = cumtime / nclall 

    3.cProfile

    profile:c语言实现的性能测试模块,接口和profile一样。

    >>> import cProfile
    >>> def fun():
       for i in range(100000):
          a = i * i
    
          
    >>> cProfile.run('fun()')
             4 function calls in 0.024 seconds
    
       Ordered by: standard name
    
       ncalls  tottime  percall  cumtime  percall filename:lineno(function)
            1    0.024    0.024    0.024    0.024 <pyshell#17>:1(fun)
            1    0.000    0.000    0.024    0.024 <string>:1(<module>)
            1    0.000    0.000    0.024    0.024 {built-in method exec}
            1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
    
    
    >>> 

    ncalls、tottime、percall、cumtime含义同profile。

    4.line_profiler

    安装:

    pip install line_profiler

    安装之后kernprof.py会加到环境变量中。

    line_profiler可以统计每行代码的执行次数和执行时间等,时间单位为微妙。

    测试代码:

    C:Python34 est.py

    import time
    
    
    @profile
    def fun():
        a = 0
        b = 0
        for i in range(100000):
            a = a + i * i
    
        for i in range(3):
            b += 1
            time.sleep(0.1)
    
        return a + b
    
    
    fun()

    使用:

    1.在需要测试的函数加上@profile装饰,这里我们把测试代码写在C:Python34 est.py文件上.

    2.运行命令行:kernprof -l -v C:Python34 est.py

    输出结果如下:

    Total Time:测试代码的总运行时间 
    Hits:表示每行代码运行的次数  
    Time:每行代码运行的总时间  
    Per Hits:每行代码运行一次的时间  
    % Time:每行代码运行时间的百分比

    5.memory_profiler:

    memory_profiler工具可以统计每行代码占用的内存大小。  

    安装:

    pip install memory_profiler  

    pip install psutil  

    测试代码:  

    同line_profiler。 

    使用: 

    1.在需要测试的函数加上@profile装饰
      
    2.执行命令: python -m memory_profiler C:Python34 est.py 
      
    输出如下:

    6.PyCharm图形化性能测试工具:

    PyCharm提供了图像化的性能分析工具,使用方法见利用PyCharm的Profile工具进行Python性能分析

    7.objgraph:

    objgraph是一个实用模块,可以列出当前内存中存在的对象,可用于定位内存泄露。

    objgraph需要安装:

    pip install objgraph
  • 相关阅读:
    SQL 触发器[1]
    SQL 存储过程[1]-常用参数及示例
    前端软件开发体系
    人工智能AI Boosting HMC Memory Chip
    先进一站式IP及定制
    BTC芯片介绍
    ONNX MLIR方法
    MLIR中间表示和编译器框架
    Non-Maximum Suppression,NMS非极大值抑制
    华为计算平台MDC810发布量产
  • 原文地址:https://www.cnblogs.com/dhcn/p/14049278.html
Copyright © 2011-2022 走看看