Python的profile模块: <string>:1(?)

25

我正在使用Python (v2.4)的profile模块来分析一个numpy脚本,以下记录似乎占用了大部分执行时间:

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
 256/1    0.000    0.000    7.710    7.710 <string>:1(?)

不幸的是,它的外观使得在谷歌上很难找到。

我该如何确定这到底是什么?

编辑 通过以下方式从shell中运行分析器:python -m profile -s cumulative script.py


你是否使用profile.run()来运行分析器?那么<string>:1指的是你传递给该函数的语句字符串的第一行。如果您以不同的方式调用分析器,请指定。 - Sven Marnach
@Sven Marnach:好的,我已经将这个信息添加到问题中了。 - NPE
1
假设您询问是因为想要更高的性能,请尝试这个 - Mike Dunlavey
1个回答

26

请忽略这一行,这是性能分析器实现方式的一个副产品,不提供任何有用信息。请查看其"tottime"值:0.000。 "tottime"是执行"<string>:1(?)"(不包括执行其子节点所花费的时间)的时间总量,因此在这里没有花费时间。 "cumtime"和"percall"很大,因为它们包括在子级中花费的时间。有关详细信息,请参见http://docs.python.org/library/profile.html#cProfile.run


3
如果“largest” tottime 是 `<string>:1(<module>)”,那该怎么办? - endolith
7
如果所有的代码都是在名为"foo.py"的文件中的顶层运行,且使用python foo.py来执行程序,则<string>:1(<module>)是入口点Python脚本中的顶级代码。所谓"顶级"是指不在任何函数定义内部 - 直接运行。因此,您将会看到<string>:1(<module>)的高tottime。请注意,此处并未提供解释。 - Jean-Paul Calderone
如果我按tottime对%prun输出进行排序,那么在<string>:1(<module>)中有8.9秒(总共9.6秒)。下一个条目是0.2秒,然后迅速减少。在顶部条目中发生了什么? - Barden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接