大约8到9年前,我看到了一个Visual Studio工具(我真的不记得名字),它可以显示函数调用及其性能。我真的很喜欢它所以我想知道在Python中是否有类似的东西。假设您有三个功能:
def first_func():
...
def second_func():
...
for i in xrange(10):
first_function()
...
def third_func():
...
for i in xrange(5):
second_function()
...
所以,该工具的最终报告是这样的(包括连接图):
first_func[avg 2ms] <--50 times--< second_func[avg 25ms] <--5 times--< third_func[avg 140ms]
这样的工具可以更容易地找到系统中的瓶颈。特别是对于大型系统。
答案 0 :(得分:3)
您可以使用与python安装捆绑在一起的探查器。 Python Profiler Link
答案 1 :(得分:2)
使用分析器逐行计时和执行频率:
首先,安装line_profiler
其次,通过使用@profile装饰器修饰要测量的函数来修改源代码。
第三,kernprof -l -v yourscript.py
-l
选项告诉kernprof将@profile装饰器注入到脚本的内置函数中,-v
告诉kernprof在脚本完成后显示时序信息。
输出:
答案 2 :(得分:1)
通常认为你需要知道的是事情被调用了多少次,他们花了多少时间(自我与包容性),以及谁是多少时间。 然后你可以戴上你的侦探的帽子,希望在问题所在的地方找到答案。
还有另一种方法,即问题,而不是功能,而是代码行,它们在堆栈上的挂钟时间的百分比。原因是,如果这样的代码行可以不花时间,通过避免或删除它或以不同的方式完成它的工作,那么这个百分比就是可以节省多少。 你不必成为一名侦探来指出它。 代码中的任何瓶颈都必须显示为这样一条线,精确的百分比并不重要。 Here's an example.