解决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)可用于实现高精度的延时。