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

    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
  • 相关阅读:
    #454. 【UER #8】打雪仗
    6496. 【GDOI2020模拟03.08】圣痕
    6495. 【GDOI2020模拟03.08】死星
    6494. 【GDOI2020模拟03.08】勘探
    NOI Online划水记
    6482. 【GDOI2020模拟02.22】代数几何(algebraic)
    6493. 【GDOI2020模拟03.04】迷宫
    6492. 【GDOI2020模拟03.04】多项式
    6491. 【GDOI2020模拟03.04】铺路
    #76. 【UR #6】懒癌
  • 原文地址:https://www.cnblogs.com/zhuochong/p/10188978.html
Copyright © 2011-2022 走看看