Python - time.time()与bash时间

时间:2014-01-02 21:52:45

标签: python macos bash time

我一直在研究Python 3中的一些Project Euler问题[osx 10.9],我想知道它们运行了多长时间。

我一直在使用以下两种方法为我的节目计时:

1)

import time
start = time.time()

[program]

print(time.time() - start)

2)在bash命令行上,输入time python3 ./program.py

但是,这两种方法通常会给 wildy 带来不同的结果。在我正在处理的程序中,第一个返回0.000263(秒,截断),而第二个返回

real    0m0.044s
user    0m0.032s
sys     0m0.009s

显然存在巨大的差异 - 与real时间相比有两个数量级。

我的问题是:
a)为什么差异?翻译是否有开销? b)我应该使用哪一个来准确确定程序运行的时间? time.time()在如此短的间隔内是否准确?

我意识到这些微不足道的时间并不是最重要的;这更像是一种好奇心。

感谢。

[更新]
谢谢你的所有答案&评论。你的开销是正确的。这个计划:

 import time
 start = time.time()

 print("hello world")

 print(time.time() - start)
根据bash,

需要约0.045秒。

根据bash,我复杂的Project Euler问题耗时约0.045秒。问题解决了。

我会看一下timeit。感谢。

2 个答案:

答案 0 :(得分:11)

解释器导入site.py并可在启动时触及其他各种文件。这需要花费时间才能执行import time行:

$ touch empty.py
$ time python3 empty.py 

real    0m0.158s
user    0m0.033s
sys     0m0.021s

在计时代码时,考虑到其他进程,磁盘刷新和硬件中断都需要花费时间并影响您的时间。

使用timeit.default_timer()为您的平台获取最准确的计时器,但最好使用timeit模块本身计算代码的各个代码段,以消除尽可能多的变量。

答案 1 :(得分:4)

因为当您在bash中运行time内置时,所花费的实际时间包括启动Python解释器所需的时间并导入运行代码所需的模块,而不仅仅是计算单个函数的执行时间在你的代码中。

要看到这一点,请尝试例如

import os
import time
start = time.time()
os.system('python <path_to_your_script>')
print time.time() - start

您会发现这更接近time报告的内容。