Python 如何用树莓圆周率获得更精确的时间测量?

Python 如何用树莓圆周率获得更精确的时间测量?,python,performance,time,raspberry-pi,raspbian,Python,Performance,Time,Raspberry Pi,Raspbian,最近,我正在开发一种基于raspberrypi 2b+的设备,该设备连接到mpu9250(我自己焊接) 我可以正确读取9轴数据,但我注意到每个数据输入具有不同的时间差: 该图显示了两个数据之间的时间差。 但我使用QTimer确保我的代码每10毫秒读取一次mpu9250 所以我在RaspberryPi 2b+上尝试了这段代码: import time import matplotlib.pyplot as plt time_arr = [] for i in range(5000):

最近,我正在开发一种基于raspberrypi 2b+的设备,该设备连接到mpu9250(我自己焊接)

我可以正确读取9轴数据,但我注意到每个数据输入具有不同的时间差:

该图显示了两个数据之间的时间差。 但我使用QTimer确保我的代码每10毫秒读取一次mpu9250

所以我在RaspberryPi 2b+上尝试了这段代码:

import time
import matplotlib.pyplot as plt

time_arr = []
for i in range(5000):
    t0 = time.time()
    print "K"
    t1 = time.time() - t0
    time_arr.append(t1)

plt.plot(time_arr)
plt.show()
结果:

即使是这些简单的代码仍然在图表上显示峰值,这让我很失望


有人能帮我解决这些问题或解释一下发生了什么吗?

在您的第一次测试中,您使用的是QTimer,它将计时器视为后台任务。QT主要致力于提供响应性GUI

在第二个测试中,循环中有一个print语句——在打印过程中有许多因素会导致执行该语句所需的时间发生变化

看看这门课,寻找更好的方法

文件说:

此类表示一个操作,该操作应仅在经过一定时间后运行—计时器。Timer是Thread的一个子类,因此也可以作为创建自定义线程的示例

与线程一样,计时器是通过调用其start()方法启动的。可以通过调用cancel()方法停止计时器(在其操作开始之前)

请注意,它还表示:

计时器在执行其操作之前等待的时间间隔可能与用户指定的时间间隔不完全相同

换句话说,它并不完美,但很可能比你现在看到的要好得多



如果您对测量精度有较高的兴趣,而不是以更高的精度来调度任务,那么考虑使用Python 3中可用的时间。

是PI具有不一致的性能/调度的问题吗?如果是这样的话,考虑使用实时OS来安装你的问题RasBee Jesie并更新到最新版本……并且我在图形环境中运行我的代码……重要吗?是的,重要的是,你需要图形环境来运行你的代码吗?您可以尝试限制您的进程以提高性能,但我必须在图形环境中运行脚本…因此我认为无法避免不一致的数据读取时间。。。。