2011-04-21 232 views
1

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

这样的工具将使它更容易找到瓶颈进入系统。特别是对于大型系统。

+1

代码吧!我会用它! – 2011-04-21 18:03:57

+0

@eat_a_lemon :))如果我找不到类似的东西,我会尽力自己实现。在开始研究之前,我只想检查是否有任何与之相关的东西。 – pocoa 2011-04-21 18:08:27

回答

3

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

+0

可以,应该。 – nmichaels 2011-04-21 18:14:08

+0

是的,这很有用,但是它的报告没有提供任何有关这些功能关系的信息,你需要自己弄清楚。 – pocoa 2011-04-21 18:35:32

+1

@pocoa:确实如此,但获得指标是很难的部分。从那里你可以编写你自己的Python脚本,这将允许你选择你想要比较的函数的数据。我认为你很难找到一个能够自动比较“魔术”功能的工具。我说'魔术',因为只有你知道你想比较类似逻辑的功能。 – 2011-04-21 19:10:40

1

认为你需要知道的事情是多少次被调用,他们需要多少时间(自我对包容性)以及谁在多少时间内调用谁,这是很常见的。 然后,你可以把你的侦探的帽子,并希望侦察出问题的地方。

还有一种方法是询问,不是关于函数,而是代码行,它们在堆栈上的挂钟时间百分比。原因是,如果这样的代码行可以避免浪费时间,避免它或删除它或以不同的方式工作,那么百分比就是可以节省多少。 你不必成为一个侦探来查明它。 代码中的任何瓶颈都必须显示为这样一行,并且精确的百分比并不重要。 Here's an example.

2

行由行时间和执行频率分析器:

首先,安装line_profiler

其次,要与@profile装饰来衡量装饰功能修改源代码。

三,kernprof -l -v yourscript.py

-l选项告诉kernprof注入@profile装饰到脚本的内建命令,并-v告诉kernprof一旦你完成脚本来显示时间信息。

输出:

enter image description here