Python时间测试
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()时间。