cProfile和Python:查找代码花费最多时间的特定行号

时间:2009-09-30 20:46:35

标签: python scripting numbers profiler line

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

结果告诉我,花在调用我定义的对象中的方法的时间最多。但是,我真正想要的是确切地知道该函数中的行号正在耗费时间。

任何想法是如何获得这些额外信息的?

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

3 个答案:

答案 0 :(得分:3)

Robert Kern写的python中有一个line profiler

答案 1 :(得分:2)

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

This tells why it works. This is an example.

答案 2 :(得分:2)

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

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

如果你需要更精细地弄清楚什么是你所有的时间,那么你需要将你的大功能重构为几个较小的功能。