解决Python中time.sleep()函数的精度问题 - AruiLR/MyNote GitHub Wiki
最近在一个硬件开发的项目中使用到了Python的延时函数——time.sleep(),发现该函数的精度只为10ms,在一些需要高精度延时的场合(如硬件开发)使用会造成各种问题。Python版本3.6.0
测试
sleep 1秒
import time
start=time.time()
time.sleep(1)
end=time.time()
print(end-start)
# result: 1.000614881515503 —— 正常
sleep 0.1秒
import time
start=time.time()
time.sleep(0.1)
end=time.time()
print(end-start)
# result: 0.10939431190490723 —— 正常
sleep 0.01秒
import time
start=time.time()
time.sleep(0.01)
end=time.time()
print(end-start)
# result: 0.015622138977050781 —— 正常
sleep 0.0001秒
import time
start=time.time()
time.sleep(0.0001)
end=time.time()
print(end-start)
# result: 0.015697240829467773 —— 不正常,只延时了0.01秒
从上述几个实例可以看出,time.sleep()函数的精度只能达到10ms
解决方法
找到了一种替代time.sleep()的方法,可以实现更高精度的延时。使用time.perf_counter()
time.perf_counter()返回计时器的精准时间(系统的运行时间)。
import time
print(time.perf_counter())
print(time.perf_counter())
# result: 3.128890668880025e-06 计时精度达到微妙
从上述例子可以清楚的看到time.perf_counter()的精度远远高于time.sleep()。
精度够了,那么直接用它实现延时函数的功能吧,上代码
import time
def high_precision_delay(delay_time):
''' Function to provide accurate time delay in millisecond
'''
_ = time.perf_counter() + delay
while time.perf_counter() < _:
pass
上述函数high_precision_delay(delay_time)可用于实现高精度的延时。