计算python程序的CPU时间?

Nat*_*ush 10 python profile cpu time execution

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

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

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

Cprofiles看起来越来越有吸引力,但它们是否会返回CPU时间?另外,一个小问题 - 它输出的信息太多了.有没有办法将输出的信息输入到txt或.dat文件中,以便实际读取它?

干杯

操作系统:Ubuntu程序:python 2.7

She*_*kan 11

听起来你正在寻找一种方法来计算整个过程的执行时间,你可以做的最好的事情是使用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模块.


最好的方法是使用time.process_time(),它只在python 3.3及更高版本中可用,这里是来自docs的信息:

返回当前进程的系统和用户CPU时间总和的值(以小数秒为单位).它不包括睡眠期间经过的时间.根据定义,它在整个过程中.返回值的参考点未定义,因此只有连续调用结果之间的差异才有效.

  • 很好的答案,但`process_time`仅适用于Python 3.3及更高版本,他使用的是2.7. (4认同)
  • `timeit.default_timer()`是Python 3.3+上的`time.perf_counter()`.这是Ubuntu上Python 2的[`time.process_time()`和`time.perf_counter()`.(https://gist.github.com/zed/5073409) (4认同)

Mar*_*ers 5

而不是time.clock()使用timeit.default_timer(); 它使用适合您平台的最准确的选项。例如,对于 Ubuntu,将使用此time.time()选项。

使用 时timeit,创建一个可以重复用于 的设置函数timeit。是的,这看起来需要一些工作,但它可以确保您对真正想要测量的内容进行计时,并且不会在时间关键的测量部分中包含设置代码。