关心代码运行的效率,当然就想测量一下程序的运行时间。如果知道程序开始运行和结束运行的时刻,两者之差就是我们关心的运行时间值。
# 伪代码示意一下:Pseudo code
startTime = getTime()
myProgram.run()
endTime = getTime()
print(startTime - endTime)
为了有个简单的、可以被测的程序,直接让程序睡一会。搜索关键字:“python”, “sleep”,看了前三篇短小精悍的博客,time模块中的sleep函数应该就能满足这个需求。
import time
def timeIt( second ):
startTime = time.time()
time.sleep(second)
endTime = time.time()
actualTime = endTime-startTime
error = (actualTime - second)*100.0/second #相对误差
print("预期运行时间:{:.6f},实际运行时间:{:.6f}, 误差:{:.3f}%".
format(second, actualTime, error))
if __name__=="__main__":
for i in range(0,5):
timeIt(1) # 1秒
timeIt(0.1) # 100mS,100毫秒
timeIt(0.01) # 10mS
timeIt(0.001) # 1mS
timeIt(0.0001) # 100uS,100微秒
timeIt(0.00001) # 10uS
timeIt(0.000001) # 1uS
print("")
运行结果大概是这样子的:
基本上,sleep这个函数在10微秒级(0.01秒)以上是可以比较好的控制休眠时间的,误差可基本上在10%以内。如果给sleep传入更小的时间单位,误差就会比较大。
当然还有一个问题不能确定:
1、在不同机器,不同操作系统上,sleep函数是否有可能由于实现方式不一样,导致可以控制的最小时间单位不一样?
这个问题可能有人在不同机器上试验过,但是貌似没有相关的博客。我的机器是win10,i5-7400 @3.00GHz,python 3.7.1,如果你是不同的系统或者配置,可以尝试看看sleep的效果是否不一样?
另外注意两个小知识点:
1、格式化字符串输出的时候,可以将 大括号 加冒号({:})认为是代替了原来百分号(%),例如:{:.6f} 等价于原来的 %.6f 格式化字符串。
2、time.sleep( ) 的参数是秒,但是可以是小数。