性能分析器

时间:2011-04-21 17:58:44

标签: python performance profiling

大约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]

这样的工具可以更容易地找到系统中的瓶颈。特别是对于大型系统。

3 个答案:

答案 0 :(得分:3)

您可以使用与python安装捆绑在一起的探查器。 Python Profiler Link

答案 1 :(得分:2)

使用分析器逐行计时和执行频率:

首先,安装line_profiler

其次,通过使用@profile装饰器修饰要测量的函数来修改源代码。

第三,kernprof -l -v yourscript.py

-l选项告诉kernprof将@profile装饰器注入到脚本的内置函数中,-v告诉kernprof在脚本完成后显示时序信息。

输出:

enter image description here

答案 2 :(得分:1)

通常认为你需要知道的是事情被调用了多少次,他们花了多少时间(自我与包容性),以及谁是多少时间。 然后你可以戴上你的侦探的帽子,希望在问题所在的地方找到答案。

还有另一种方法,即问题,而不是功能,而是代码行,它们在堆栈上的挂钟时间的百分比。原因是,如果这样的代码行可以不花时间,通过避免或删除它或以不同的方式完成它的工作,那么这个百分比就是可以节省多少。 你不必成为一名侦探来指出它。 代码中的任何瓶颈都必须显示为这样一条线,精确的百分比并不重要。 Here's an example.