Noonisy
cProfile分析Python程序性能
2023-06-25
阅读:335

cProfile使用


run

import cProfile


def predict():
    ....


cProfile.run('predict()')

# 输出
155353 function calls (154818 primitive calls) in 6.252 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 <frozen importlib._bootstrap>:1017(_handle_fromlist)
        1    0.089    0.089    6.252    6.252 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 BlpImagePlugin.py:258(_accept)
其中
  • ncalls表示调用次数
  • tottime表示在给定函数中花费的总时间(不包括调用子函数的时间)
  • percall表示单词调用给定函数花费的时间
  • cumtime表示在这个函数和所有子函数中花费的累积时间(从调用到退出)
  • percall表示调用一次这个函数内所有函数所用的时间
  • filename:lineno(function)表示每个函数的各自信息

保存数据

cProfile.run('predict()', 'result')
就会保存到当前目录下的result文件

查看性能数据

import pstats
from pstats import SortKey

# 加载保存到restats文件中的性能数据
p = pstats.Stats('result')

# 打印所有统计信息
p.strip_dirs().sort_stats(-1).print_stats()

# 打印累计耗时最多的10个函数
p.sort_stats(SortKey.CUMULATIVE).print_stats(10)

# 打印内部耗时最多的10个函数(不包含子函数)
p.sort_stats(SortKey.TIME).print_stats(10)

# 打印包含load的函数名的调用者统计信息
p.print_callers(.5, 'normalize')

# 按耗时排序,依次打印类的__init__方法的统计信息
p.sort_stats(SortKey.CUMULATIVE).print_stats('__init__')

References

最后编辑于:2023 年 06 月 25 日 10:14
邮箱格式错误
网址请用http://或https://开头