我一直在研究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
。感谢。
答案 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
报告的内容。