在Pycharm的专业版中,提供了一个分析项目性能的工具run->Profile
,可以将工程运行时各函数的调用次数和所用时间记录下来,提供静态数据和关系图表两种表达方式。
只需轻轻一点,统计数据和图表关系一览无遗,确实方便。但是此方法局限性很大,一是必须使用pycharm,这样使用其他ide如VS Code的用户就没法使用了;二是它不仅要使用pychram,还得是专业版,专业版是要收费的(破解和学生版除外),这又是一道坎挡在了我们的路上。那么有其他的方法来进行类似的分析吗?当然是有的。
profile
profile可以分析函数运行时的性能消耗情况,调用方法如下:
import profile
profile.run("main()")
main()即为需要分析的入口函数,以字符串形式传入。运行之后可以得到如下的输出:
19 function calls in 0.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 :0(exec)
4 0.000 0.000 0.000 0.000 :0(len)
4 0.000 0.000 0.000 0.000 :0(print)
1 0.000 0.000 0.000 0.000 :0(setprofile)
2 0.000 0.000 0.000 0.000 :0(sleep)
1 0.000 0.000 0.000 0.000 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 profile:0(main())
0 0.000 0.000 profile:0(profiler)
1 0.000 0.000 0.000 0.000 test.py:1(next_cal)
1 0.000 0.000 0.000 0.000 test.py:16(__init__)
1 0.000 0.000 0.000 0.000 test.py:19(search_string)
1 0.000 0.000 0.000 0.000 test.py:36(__next_arr)
1 0.000 0.000 0.000 0.000 test.py:51(main)
虽然函数调用情况可以得到的,但是分析起来比较麻烦,函数之间的调用关系也没有给出。此方式虽然简单但是不够直观。
pycallgraph
在pycallgraph之前不得不先提及一下**Graphviz**,毕竟pycallgraph是基于Graphviz的。Graphviz是开源的图形可视化软件,能够将结构信息表示为抽象图和网络图的方