简单的Python代码需要很长时间才能运行,Hotshot错误报告

dpi*_*h40 5 python optimization profiling

我正在尝试使用hotshot优化一些代码,我希望它很好,因为它是高性能的分析器和所有.但由于某种原因,我得到了非常不准确的结果.在我最近的分析运行中,hotshot报告了我称之为7.946秒的顶级函数的累积时间.但是,如果没有计时,我可以告诉它需要更长的时间.使用time.time()自己定时运行时间给我一个42.465秒的运行时间.我猜这是因为hotshot不计算系统IO时间或其他什么,我的程序是批量处理大量的二进制文件?

但是,使用更多time.time()块我将大部分额外时间使用(hotshot未注意到)缩小到不执行任何IO的较低级别处理功能.hotshot报告该功能的总时间和累计时间分别为4.414和6.185秒.但是,再次使用time.time()语句我发现它的累积时间超过30秒.在一个相对简单的代码块中花费的累积时间是7.32秒,比在整个函数中花费的热点更长.该块看起来像这样:

format = element[1]
if isinstance(format, tuple):
    format, operator, operand = format
else:
    operator, operand = (None, None)
Run Code Online (Sandbox Code Playgroud)

而已.这个区块运行了900多万次,所以也许我不应该感到惊讶的是花了这么多时间.但显然没有IO在这里完成.为什么热点如此低估了这个功能(以及整个程序)的时间?

在你问之前,不,我没有使用多线程或类似的东西.

Mik*_*vey 0

您想知道时间都去哪儿了,对吧?不要将其视为测量时间。将其视为查找大部分时间都位于堆栈上的代码行,无论总数如何。 这是一个例子。

许多分析器都陷入了gprof 陷阱,包括忽略阻塞时间、认为代码行不重要、认为“自身时间”重要、以及认为测量必须准确。