Python 性能分析器信息不足
我正在尝试找出为什么某个函数执行得这么慢。
我像这样使用了性能分析工具:
ipdb> import profile
ipdb> profile.runctx('report.generateOutput()', globals(), locals())
1 function calls in 40.783 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
0 0.000 0.000 profile:0(profiler)
1 40.783 40.783 40.783 40.783 profile:0(report.generateOutput())
但是你看,这个信息并没有太大用处。
我需要的是一些详细的信息,告诉我时间都花在哪里了,我这里缺少了什么?
2 个回答
2
使用 profile report.generateOutput(),而不是直接调用这个函数。
如果你想要对一个以 foo() 为主入口的应用进行性能分析,你需要在你的模块中添加以下内容:
import cProfile
cProfile.run('foo()')
也许 Python 的性能分析文档 会对你有帮助。
0
你说了两件不同的事情:
“我需要一些关于时间花在哪里的详细信息。”
“我想知道为什么某个函数执行得很慢。”
你看,这两者并不是一回事。我觉得问为什么比问哪里更好,因为哪里其实是个模糊的概念。
举个例子,假设有一个“瓶颈”,是对一个大字符串数组进行冒泡排序。时间花在哪里呢?是在冒泡排序的内部循环中,还是在字符串比较上?性能分析工具可能会说是后者,但真正的问题和原因其实是在调用栈的更高层。