Python时间测试

  • Python时间测试:time()、perf_counter()和process_time()的区别
  • 一、time()(float)
  • 二、perf_counter()(float)
  • 三、process_time()的区别(float)
  • 四、纳秒(int)
  • 总结
  • 三者比较



Python时间测试:time()、perf_counter()和process_time()的区别


一、time()(float)

1. time.time()方法
		返回当前时间的时间戳(1970纪元后经过的浮点秒数)。
		
	 2. now = time.localtime()
		time.strftime("%Y-%m-%d %H:%M:%S",now)
		'2022-06-14 15:57:26'

格式

说明

%a

显示简化星期名称

%A

显示完整星期名称

%b

显示简化月份名称

%B

显示完整月份名称

%c

本地相应的日期和时间表示

%d

显示当月第几天

%H

按24小时制显示小时

%I

按12小时制显示小时

%j

显示当年第几天

%m

显示月份

%M

显示分钟数)

%p

本地am或者pm的相应符

%S

显示秒数)

%U

一年中的星期数

%w

显示在星期中的第几天,默认从0开始表示周一

%W

和%U基本相同

%x

本地相应日期

%X

本地相应时间

%y

去掉世纪的年份(00 - 99)

%Y

完整的年份

%Z

时区的名字(如果不存在为空字符)

%%

‘%’字符

计算数据的话可以start = time.time()
xxxxxxx
xxxxxxx
end = time.time()
result = end -start

二、perf_counter()(float)

import time

scale = 50 

print("执行开始".center(scale//2,"-"))  # .center() 控制输出的样式,宽度为 25//2,即 22,汉字居中,两侧填充 -

start = time.perf_counter() # 调用一次 perf_counter(),从计算机系统里随机选一个时间点A,计算其距离当前时间点B1有多少秒。当第二次调用该函数时,默认从第一次调用的时间点A算起,距离当前时间点B2有多少秒。两个函数取差,即实现从时间点B1到B2的计时功能。
for i in range(scale+1):   
    a = '*' * i             # i 个长度的 * 符号
    b = '.' * (scale-i)  # scale-i) 个长度的 . 符号。符号 * 和 . 总长度为50 
    c = (i/scale)*100  # 显示当前进度,百分之多少
    dur = time.perf_counter() - start    # 计时,计算进度条走到某一百分比的用时
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')  # \r用来在每次输出完成后,将光标移至行首,这样保证进度条始终在同一行输出,即在一行不断刷新的效果;{:^3.0f},输出格式为居中,占3位,小数点后0位,浮点型数,对应输出的数为c;{},对应输出的数为a;{},对应输出的数为b;{:.2f},输出有两位小数的浮点数,对应输出的数为dur;end='',用来保证不换行,不加这句默认换行。
    time.sleep(0.1)     # 在输出下一个百分之几的进度前,停止0.1秒
print("\n"+"执行结果".center(scale//2,'-'))
+ 通常perf_counter()用在测试代码时间上,具有最高的可用分辨率。
+ 返回性能计数器的值---s(秒),即具有最高可用分辨率的时钟,以测量短持续时间。 
+ **它确实包括睡眠期间经过的时间,并且是系统范围的。**

三、process_time()的区别(float)

返回当前进程的系统和用户CPU时间总和的值---s(秒)
通常time.process_time()也用在测试代码时间上,根据定义,它在整个过程中。
**注意 process_time()不包括sleep()休眠时间 期间经过的时间。**

四、纳秒(int)

time.perf_counter_ns()
time.process_time_ns()
time.time_ns()

总结

三者比较

除了time模块,Python还提供了 timeit 模块。具体的用法:更多用法可以查看 timeit官方文档

import timeit
t = timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)
print(t)
timeit模块提供了一种简单的方法来计算一小段Python代码,比如一些循环或者正则匹配。 timeit既有命令行界面,也有可调用界面。 避免了许多用于测量执行时间的常见陷阱。可以用于基准测试/分析目的的代码块。

1,time()精度上相对没有那么高,而且受系统的影响,适合表示日期时间或者大程序程序的计时。

2,perf_counter()适合小一点的程序测试,会计算sleep()时间

3,process_counter()适合小一点的程序测试,不会计算sleep()时间。

time_path