解决Python中time.sleep()函数的精度问题

技术文档网 2021-05-12

最近在一个硬件开发的项目中使用到了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)可用于实现高精度的延时。

相关文章

  1. Django基本命令

    Django基本命令 打开linux终端直接在终端中输入以下命令即可。 新建一个django project 命令:django-admin.py startproject project-nam

  2. 17个新手常见Python运行时错误

    17个新手常见Python运行时错误 当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。 当初学 Python

  3. Python+SQLite真的有用吗?

    SQLite是个很简单的数据库,一个文件就可以搞定,存储上千万行的数据也没问题,图形界面程序有很多,管理很方便,用Python可以编程操作,也很简单,一切都似乎很完美。 我导入了几千万行的数据进SQL

  4. os各种各样的操作系统接口

    这个模块提供了一种使用操作系统相关功能的移动方式。如果您只想读取或写入一个文件,请查看open(),如果您想要操作路径,请参见操作os.path模块,如果您想要读取命令行上所有文件中的所有行,请参阅f

  5. 通过webpy和nginx-with-fastcgi搭建web.py

    这一节讲解的是如何使用Nginx和FastCGI搭建Web.py应用 环境依赖的软件包 Nginx 0.8.* or 0.7.* (需要包含fastcgi和rewrite模块)。 Webpy 0.3

随机推荐

  1. Django基本命令

    Django基本命令 打开linux终端直接在终端中输入以下命令即可。 新建一个django project 命令:django-admin.py startproject project-nam

  2. 17个新手常见Python运行时错误

    17个新手常见Python运行时错误 当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。 当初学 Python

  3. Python+SQLite真的有用吗?

    SQLite是个很简单的数据库,一个文件就可以搞定,存储上千万行的数据也没问题,图形界面程序有很多,管理很方便,用Python可以编程操作,也很简单,一切都似乎很完美。 我导入了几千万行的数据进SQL

  4. os各种各样的操作系统接口

    这个模块提供了一种使用操作系统相关功能的移动方式。如果您只想读取或写入一个文件,请查看open(),如果您想要操作路径,请参见操作os.path模块,如果您想要读取命令行上所有文件中的所有行,请参阅f

  5. 通过webpy和nginx-with-fastcgi搭建web.py

    这一节讲解的是如何使用Nginx和FastCGI搭建Web.py应用 环境依赖的软件包 Nginx 0.8.* or 0.7.* (需要包含fastcgi和rewrite模块)。 Webpy 0.3