Python脚本性能剖析
$ python -m cProfile -o test1.out test1.p
$ python -c "import pstats; p=pstats.Stats('test1.out'); p.print_stats()"
$ python -c "import pstats; p=pstats.Stats('test1.out'); p.sort_stats('time').print_stats()"
除了命令行外,可直接在脚本内部使用
sort_stats支持以下参数:
ncalls? 被调用次数
cumulative 函数运行的总时间
file? 文件名
module? 文件名
pcalls? 简单调用统计(兼容旧版,未统计递归调用)
line? 行号
name? 函数名
nfl? Name/file/line
stdname? ? 标准函数名
time? 函数内部运行时间(不计调用子函数的时间)
输出结果说明:
ncalls 函数的被调用次数
tottime 函数总计运行时间,除去函数中调用的函数运行时间
percall 函数运行一次的平均时间,等于tottime/ncalls
cumtime 函数总计运行时间,含调用的函数运行时间
percall 函数运行一次的平均时间,等于cumtime/ncalls
filename:lineno(function) 函数所在的文件名,函数的行号,函数名
Stats的若干参数
strip_dirs() 用以除去文件名前名的路径信息。
add(filename,[…]) 把profile的输出文件加入Stats实例中统计
dump_stats(filename) 把Stats的统计结果保存到文件
sort_stats(key,[…]) 最重要的一个函数,用以排序profile的输出
reverse_order() 把Stats实例里的数据反序重排
print_stats([restriction,…]) 把Stats报表输出到stdout
print_callers([restriction,…]) 输出调用了指定的函数的函数的相关信息
print_callees([restriction,…]) 输出指定的函数调用过的函数的相关信息