在统计python代码执行速度时要使用到time包,可以使用time.time()和time.process_time() (注:Python 3.8 已移除 clock() 方法,可以使用perf_counter() 或process_time() 方法替代),而两者是有区别的。
cpu 的运行机制:cpu是多任务的,例如在多进程的执行过程中,一段时间内会有多个进程被处理。一个进程从开始到结束其实是在这期间的一系列时间片段上断断续续执行的。所以这就引出了程序执行的cpu时间(该程序单纯在cpu上运行所需时间)和墙上时钟wall time。
- time.process_time()是统计cpu时间 的工具,这在统计某一程序或函数的执行速度最为合适。两次调用time.clock()函数的插值即为程序运行的cpu时间。
- time.time()是统计的wall time(即墙上时钟),也就是系统时钟的时间戳(1970纪元后经过的浮点秒数)。所以两次调用的时间差即为系统经过的总时间。
本人用python3.6.3跑了两个例子作了对比。
例1:注释time.sleep(5)
import time
def test():
a = 0
for i in range(100000000):
a += 1
t0_clock = time.process_time()
t0_time = time.time()
test()
# time.sleep(5)
t1_clock = time.process_time()
t1_time = time.time()
print(" cpu time is %f" % (t1_clock - t0_clock))
print("wall time is %f" % (t1_time - t0_time))
例1代码运行结果如下:
D:\anaconda\python\envs\test\python.exe E:/test/test_time.py
cpu time is 5.609375
wall time is 5.629945
Process finished with exit code 0
例2:取消注释time.sleep(5)
import time
def test():
a = 0
for i in range(100000000):
a += 1
t0_clock = time.process_time()
t0_time = time.time()
test()
time.sleep(5) # 取消注释之后
t1_clock = time.process_time()
t1_time = time.time()
print(" cpu time is %f" % (t1_clock - t0_clock))
print("wall time is %f" % (t1_time - t0_time))
例2代码运行结果如下:
D:\anaconda\python\envs\test\python.exe E:/test/test_time.py
cpu time is 4.625000
wall time is 9.637261
Process finished with exit code 0
【总结】因编辑水平有限,文中难免存在个别错误或疏漏,欢迎大家留言区批评指正~~