5

我正在使用 cProfile、pstats 和 Gprof2dot 来分析一个相当长的 python 脚本。

结果告诉我,大部分时间都花在调用我定义的对象中的方法上。但是,我真正想要的是确切地知道该函数中的哪个行号正在占用时间。

知道如何获取这些附加信息吗?

(顺便说一句,如果有帮助的话,我在 OSX 雪豹上使用 Python 2.6...)

4

3 回答 3

3

有一个由 Robert Kern 编写的 Python行分析器

于 2009-10-01T06:25:22.700 回答
2

假设“吃光”的时间是某个数字,比如 40%。然后,如果您只是中断程序或在随机时间暂停它,您将看到它的概率是 40%,它精确地暴露在调用堆栈上。这样做 10 次,在 4 个样本上,+/-,你会看到它。

这说明了它为什么起作用。 这是一个例子。

于 2009-09-30T21:36:48.617 回答
2

cProfile不跟踪函数内的行号;它只跟踪定义函数的行号。

cProfile尝试复制profile(纯 Python)的行为。 profile用于pstats存储运行中的数据,pstats仅存储函数定义的行号,而不是单个 Python 语句。

如果您需要以更精细的粒度弄清楚您一直在吃什么,那么您需要将您的大功能重构为几个更小的功能。

于 2009-09-30T21:42:54.193 回答