【发布时间】:2011-10-01 14:52:13
【问题描述】:
我正在尝试使用 hotshot 优化一些代码,我希望它会很棒,因为它是高性能分析器和所有功能。但由于某种原因,我得到的结果非常不准确。在我最近的分析运行中,hotshot 报告我调用的顶级函数的累积时间为 7.946 秒。但即使没有时间,我也可以说它需要的时间比这要长得多。自己简单地使用 time.time() 为运行时间计时,运行时间为 42.465 秒。我猜这是因为 hotshot 不计算系统 IO 时间之类的,而我的程序正在批处理大量二进制文件?
但是,使用更多 time.time() 块,我将大部分额外时间使用(hotshot 没有注意到)缩小到不执行任何 IO 的较低级别的处理函数。 hotshot 报告此函数的总时间和累积时间分别为 4.414 和 6.185 秒。但是,再次使用 time.time() 语句,我发现它的累积时间超过了 30 秒。在一个相对简单的代码块上花费的累积时间为 7.32 秒,比 hotshot 所说的整个函数花费的时间要长。该块如下所示:
format = element[1]
if isinstance(format, tuple):
format, operator, operand = format
else:
operator, operand = (None, None)
就是这样。这个区块运行了超过 900 万次,所以我不应该对花这么多时间感到惊讶。但是这里显然没有进行 IO。为什么 hotshot 如此低估了这个函数(以及整个程序)所花费的时间?
在你问之前,不,我没有使用多线程或类似的东西。
【问题讨论】:
标签: python optimization profiling