如何计时Python程序的CPU时间?

20 投票
2 回答
49483 浏览
提问于 2025-04-17 17:42

我想要测量一段代码的执行时间,但我只想知道CPU的执行时间(不考虑操作系统的其他进程等)。

我试过使用time.clock(),但感觉这个方法不太准确,每次得到的结果都不一样。(理论上来说,如果我对同一段代码再运行一次,应该得到相同的值吧?)

我花了大约一个小时在timeit上。基本上让我觉得麻烦的是“设置”过程,我最后不得不导入大约20个函数,这样做不太实际,因为我几乎是在把我的代码重新写到设置部分去使用。

使用Cprofile看起来越来越吸引人,但它能返回CPU时间吗?另外,有个小问题——它输出的信息太多了。有办法把这些输出的信息保存到txt或.dat文件里,这样我才能好好阅读吗?

谢谢!

操作系统:Ubuntu 程序:python 2.7

2 个回答

5

与其使用 time.clock(),不如用 timeit.default_timer();这个方法会根据你的系统选择最准确的计时方式。比如在Ubuntu系统上,它会使用 time.time()

在使用 timeit 时,建议你先创建一个设置函数,这样可以在多个地方重复使用 timeit。虽然这看起来有点麻烦,但这样可以确保你测量的是真正想要的部分,而不会把设置代码也算在内,这样能让测量结果更准确。

23

听起来你想要测量整个程序的执行时间,最好的办法是使用 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 时间。这意味着在同一台电脑上运行的其他程序可能会干扰计时。

你可以尝试测试 c 模块,这些模块可能会访问不同的计时 API。


最好的方法是使用 time.process_time(),这个方法只在 Python 3.3 及以上版本 可用,以下是文档中的信息:

返回当前进程的 系统和用户 CPU 时间 的总和(以小数秒为单位)。它不包括睡眠期间的时间。根据定义,它是 进程范围 的。返回值的参考点是未定义的,所以只有连续调用结果之间的差异是有效的。

撰写回答