解决Python中time.sleep()函数的精度问题
最近在一个硬件开发的项目中使用到了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)可用于实现高精度的延时。
相关文章
- Django基本命令
Django基本命令 打开linux终端直接在终端中输入以下命令即可。 新建一个django project 命令:django-admin.py startproject project-nam
- 17个新手常见Python运行时错误
17个新手常见Python运行时错误 当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。 当初学 Python
- Python+SQLite真的有用吗?
SQLite是个很简单的数据库,一个文件就可以搞定,存储上千万行的数据也没问题,图形界面程序有很多,管理很方便,用Python可以编程操作,也很简单,一切都似乎很完美。 我导入了几千万行的数据进SQL
- os各种各样的操作系统接口
这个模块提供了一种使用操作系统相关功能的移动方式。如果您只想读取或写入一个文件,请查看open(),如果您想要操作路径,请参见操作os.path模块,如果您想要读取命令行上所有文件中的所有行,请参阅f
- 通过webpy和nginx-with-fastcgi搭建web.py
这一节讲解的是如何使用Nginx和FastCGI搭建Web.py应用 环境依赖的软件包 Nginx 0.8.* or 0.7.* (需要包含fastcgi和rewrite模块)。 Webpy 0.3
随机推荐
- Django基本命令
Django基本命令 打开linux终端直接在终端中输入以下命令即可。 新建一个django project 命令:django-admin.py startproject project-nam
- 17个新手常见Python运行时错误
17个新手常见Python运行时错误 当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。 当初学 Python
- Python+SQLite真的有用吗?
SQLite是个很简单的数据库,一个文件就可以搞定,存储上千万行的数据也没问题,图形界面程序有很多,管理很方便,用Python可以编程操作,也很简单,一切都似乎很完美。 我导入了几千万行的数据进SQL
- os各种各样的操作系统接口
这个模块提供了一种使用操作系统相关功能的移动方式。如果您只想读取或写入一个文件,请查看open(),如果您想要操作路径,请参见操作os.path模块,如果您想要读取命令行上所有文件中的所有行,请参阅f
- 通过webpy和nginx-with-fastcgi搭建web.py
这一节讲解的是如何使用Nginx和FastCGI搭建Web.py应用 环境依赖的软件包 Nginx 0.8.* or 0.7.* (需要包含fastcgi和rewrite模块)。 Webpy 0.3