python得代码执行速度和空间占用统计工具line_profiler,cprofile,memory_profiler

参考文件 https://www.cnblogs.com/meishandehaizi/p/5863234.html
https://blog.csdn.net/GuoQiZhang/article/details/105408009

1.逐行统计 line_profiler

1.1 安装line_profiler

https://www.lfd.uci.edu/~gohlke/pythonlibs
在这个网址找到对应得包,然后pip install 文件路径

1.2 方法1@profiler

在需要统计的函数,加上@profler装饰器,通过命令行 kernprof -l -v test_file.py 启动

@profile
def run(a=1):
    print(a)
    for i in range(10):
        pass


if __name__ == '__main__':
    run()

1.3 方法2 LineProfiler

该方法的好处是,可以不用删除@profiler, 将lp对象放在__name__=__main__下面, 只有主动执行文件时,才会显示

from line_profiler import LineProfiler

def run(a=1):
    print(a)
    for i in range(10):
        pass


if __name__ == '__main__':
    # 创建对象
    lp = LineProfiler()
    
    # 方式一:接受函数参数
    lp.add_function(run)
    
    # 方式二:
    lp_wrap = lp(run)
    lp_wrap(11) # 11传参给run函数

    # 查看状态
    lp.print_stats()

2.函数统计cprofile

2.1 执行脚本

# 直接把分析结果打印到控制台
python -m cProfile test.py
# 把分析结果保存到文件中
python -m cProfile -o result.out test.py
# 增加排序方式
python -m cProfile -o result.out -s cumulative test.py

2.2 执行代码文件

def func(a=1):
    print(a)
    for i in range(10):
        pass

if __name__ == '__main__':
    import cProfile

    cProfile.run("func()")  # 在控制台输出
    cProfile.run("func()", filename='result.log')  # 在文件输出
    cProfile.run("func()", filename='result.log', sort='cumulative')  # 排序输出

2.3 内容分析

名称解释
ncalls表示函数调用的次数
tottime表示指定函数的总的运行时间, 除掉函数中调用子函数的运行时间
percall(第一个percall)等于tottime/ncalls
cumtime表示该函数及其所有子函数的调用运行的时间, 即函数开始调用到返回的时间
percall(第二个percall)即函数运行一次的平均时间, 等于cumtime/ncalls
fiename:lineno(function)每个函数调用的具体信息,一般执行函数名

3 memory_profiler

3.1 安装

$ pip install memory_profiler
$ pip install psutil

3.2 方法一 装饰器

from memory_profiler import profile

# @profile() # 如果不传参,则会在控制台输出
@profile(precision=4, stream=open('memory_test.log', 'w+')) # precision:小数点精确位数, stream:输出文件保存位置
def run(a=1):
    print(a)
    for i in range(10):
        pass

if __name__ == '__main__':
    run()

3.3 方法二

@profile
def run(a=1):
    print(a)
    for i in range(10):
        pass

if __name__ == '__main__':
    run()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值