计算python程序的CPU时间?

时间:2013-03-02 16:18:07

标签: python time cpu profile execution

我想计算一段我的代码,我只想要CPU执行时间(忽略操作系统进程等)。

我已经尝试过time.clock(),它看起来太不精确了,每次给出不同的答案。 (理论上,如果我再次为同一个代码片段运行它应该返回相同的值吗?)

我玩了约一个小时的timeit。基本上杀死它的是“设置”过程,我最终必须导入大约20个函数,这是不切实际的,因为我实际上只是将我的代码重新编写到设置部分以尝试使用它。

Cprofiles看起来越来越有吸引力,但它们是否会返回CPU时间?另外,一个小问题 - 它输出的信息太多了。有没有办法将输出的信息输入到txt或.dat文件中,这样我才能真正阅读它?

干杯

操作系统:Ubuntu程序:python 2.7

2 个答案:

答案 0 :(得分:10)

听起来您正在寻找一种方法来计算整个过程执行时间,您可以做的最好的事情是使用timeit.default_timer()来提供最精确的time.clock( )或time.time()函数在当前平台上可用,但它是系统范围时间,这意味着其他过程可能会干扰您的测量。

以下是timeit.default_timer()文档中的信息:

  

以特定于平台的方式定义默认计时器。在Windows上,   time.clock()具有微秒粒度,但是time.time()   粒度是1/60秒。在Unix上,time.clock()有1/100   第二个粒度,time.time()更精确。上   平台, default_timer()测量挂钟时间,而不是CPU   时间即可。这意味着在同一台计算机上运行的其他进程可能会   干扰时机。

您应该尝试测试可能访问不同时序api的c模块。


最好的方法是使用仅在 python 3.3及更高版本中提供的time.process_time(),这是来自文档的信息:

  

返回系统和的值(以小数秒为单位)   当前进程的用户CPU时间。它不包括经过的时间   在睡觉。根据定义,它是全流程。参考点   返回值是未定义的,因此只有区别   连续通话的结果是有效的。

答案 1 :(得分:3)

而不是time.clock(),请使用timeit.default_timer();它为您的平台使用最准确的选项。例如,对于Ubuntu,这将使用time.time()代替。

使用timeit时,请创建一个设置功能,然后您可以将其重复用于timeit。是的,这看起来像是一些工作,但它可以确保您计算出您真正想要测量的时间,而不是在时间关键的测量部分中包含设置代码。