2015-04-01 78 views
3

我编写了一些代码,以便随时间从GPIO获取传感器读数。 为了确保测量结果符合特定的时间,我想知道python是否以恒定的速度迭代(以便迭代之间的差距是恒定的) - 迭代之间的最小时间差是多少。python是否以恒定速度迭代?

如果他们不是,有人可以让我知道如何使时间间隔不变。 谢谢!

+0

检查这件事:https://docs.python.org/2/library/time.html#time.struct_time – ZdaR 2015-04-01 11:45:42

+1

无论语言如何,您都需要一个实时操作系统来保证速度不变。或者,这取决于您的测量需要多么可靠,因为运行在通用操作系统上的程序大部分时间都是恒定的速度,但并不总是也没有保证。 – nos 2015-04-01 11:49:05

回答

10

不,Python不会以恒定速度迭代。

Python只是Raspberry PI上的另一个进程,您的操作系统负责将时间分配给CPU(称为multi-tasking)。其他进程也获得分配时间。这意味着Python永远不会一直运行,任何处理时间都将取决于其他进程在做什么。

迭代本身也是授权到特定类型;如何生成下一个项目然后变化很大,即使Python被持续访问CPU迭代仍然会有所不同。无论你在循环体中做什么都需要时间,除非输入和输出总是完全相同,否则几乎肯定会花费不同的时间来完成这项工作。

而不是尝试定时循环,在一个循环中用time.time()timeit.default_timer(取决于你需要的精确度,在你的树莓上它将是相同的函数)测量时间,并基于此来调整你的动作。

+0

难道这不能推广到其他语言吗?因为它与底层操作系统和调度程序有关,而不是与特定语言相关? – exhuma 2015-04-01 11:50:14

+2

@exhuma:这适用于在通用操作系统上运行的所有语言。您需要[实时操作系统](http://en.wikipedia.org/wiki/Real-time_operating_system)来确保执行时间。 – 2015-04-01 11:50:54

+0

我想知道,OS会在什么情况下中断进程?如果没有异常/中断,CPU不应该一直运行这个进程吗? – khajvah 2015-04-01 11:52:17