当前位置:
首页 > Python基础教程 >
-
解决Python time.sleep()函数短时间延时不准确,实现延时误差小于0.01ms
time.sleep()函数能够暂停当前线程的运行,实现延时功能,而window系统中使用time.sleep()函数暂停当前线程并再次执行当前线程需要一定的时间(大约在ms级)。
time.perf_counter()函数的返回值为系统已经运行的时间(float类型,单位:s),该时间具有非常高的分辨率和精度,因此可以测量较短的持续时间,测量范围包含time.sleep()的休眠时间。
time.perf_counter_ns()函数则是将返回值改为了int类型,单位变为了ns。
不使用time.sleep()函数的运行情况:
点击查看代码
import time
a = time.perf_counter_ns()
# time.sleep(0.001)
b = time.perf_counter_ns()
print("a = %.4f" % (a/1000000), " ms\n", "b = %.4f" % (b/1000000), " ms", sep='')
print("b-a = %.4f" % ((b-a)/1000000), "ms")
运行结果为:
a = 960481122.4417 ms
b = 960481122.4420 ms
b-a = 0.0003 ms
不使用time.sleep()函数时,多次尝试后,执行time.perf_counter_ns()函数所耗费的时间均<0.001ms。
使用time.sleep()函数延时1ms的运行情况:
点击查看代码
import time
a = time.perf_counter_ns()
sleep(0.001)
b = time.perf_counter_ns()
print("a = %.4f" % (a/1000000), " ms\n", "b = %.4f" % (b/1000000), " ms", sep='')
print("b-a = %.4f" % ((b-a)/1000000), "ms")
运行结果为:
a = 960910032.3047 ms
b = 960910046.0363 ms
b-a = 13.7316 ms
当使用time.sleep()函数延迟1ms时,实际经过了>10ms,多次尝试的结果均在10ms左右,这表明time.sleep()函数不能准确实现ms级的短时间延时。
解决方法:不采用time.sleep()函数,直接通过多次循环实现延时
点击查看代码
import time
def delay_ms(t): # 传入的参数为延时的时间(float类型,单位ms),返回循环次数
if t <= 0:
return 0
t0 = int(1000000 * t)
t1 = time.perf_counter_ns()
t2 = time.perf_counter_ns()
t3 = 0
i = 0
while True:
i += 1
t2 = time.perf_counter_ns()
t3 = t2 - t1
if t3 >= t0:
return i
a = time.perf_counter_ns()
delay_ms(100.01) # 延时时间,单位ms
b = time.perf_counter_ns()
print("a = %.4f" % (a/1000000), " ms\n", "b = %.4f" % (b/1000000), " ms", sep='')
print("b-a = %.4f" % ((b-a)/1000000), "ms")
运行结果为:
a = 961739056.7461 ms
b = 961739156.7622 ms
b-a = 100.0161 ms
目标延时为100.01ms,实际延时为100.0161ms,相差<0.01ms,该延时方法不会因为延时时间长短而影响精度。 (注:Window11系统,i5 13400,Python3.10)
来源:https://www.cnblogs.com/yxyj/p/18817559
栏目列表
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
数据库审计与智能监控:从日志分析到异
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比