Python分析器没有提供足够的信息

时间:2011-02-24 17:09:11

标签: python profiling

我试图找出为什么某些功能需要很长时间才能完成 我正在使用这样的探查器:

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 个答案:

答案 0 :(得分:2)

配置文件report.generateOutput(),而不是函数调用。

要使用主入口点foo()来分析应用程序,您需要将以下内容添加到模块中:

import cProfile
cProfile.run('foo()')

也许the python docs on profiling会有帮助。

答案 1 :(得分:0)

你说两件不同的事情:

  • “我需要的是一些关于 所有时间花费的详细信息”

  • “我试图找出为什么某些功能需要很长时间才能完成”

你知道,这些不是一回事。我认为最好问为什么而不是 where ,因为其中实际上非常模糊。

例如,假设存在一个“瓶颈”,其中包含大量字符串的冒泡类型。花在哪里的时间?它是在冒泡排序的内部循环中,还是在字符串比较中? Profilers会说后者,但是它存在的原因和实际问题是调用堆栈的更高。

Here's an example of how I do it.