Python 检查时间间隔(在1、2、3、10 毫秒内执行操作)

Python check time interval (perform actions in 1, 2, 3, 10 milliseconds)

我想检查事件何时发生,做一组间隔特定时间的动作。

if (volt>3):
    oldtime=curtime
    curtime = t
    diff = curtime-oldtime
    if time.time == curtime + (difference/3):
        do something
        temptime=curtime+(difference/3)
    if time.time == curtime+(temptime+(difference/10):
        do something
        temptime == (temptime+(difference/10)
    if .... etc

所以每当我的电压达到阈值时,我想发送一系列具有非常特定时间的事件。我很确定它现在的设置方式既不高效也不准确。我正在将数据流式传输到图表中,不想在等待这些时间间隔时暂停(并且大约每 10 毫秒检查一次电压。

我不确定用什么来代替 if 语句,让它充当 when time.time = timeWanted: do thing

我还需要为此进行多线程处理吗? (还没体验过)

根据研究,我发现 windows 使用计时器只能精确到 10 毫秒。我应该考虑 运行 使用不同的 OS 还是使用不同的语言?

如果你真的需要准确的计时,我强烈建议使用没有垃圾收集的语言,比如 C 或 C++。但是,如果您可以容忍与精确栅格的一些偏差,那么 Python 可能会很好。

关于time.time的分辨率,请查看文档中的相应页面。 Windows 和 Linux 是有区别的。对于后者,time.time() 具有更高的分辨率,对于 Windows 应该是 time.clock()。后者我无法确认,因为我没有可用的 Windows 框。

无论如何,最好使用 threading/multiprocessing 框架,因为 CPU 在轮询时隙时会非常忙。

啊,我建议只获取一次 time() 并与一些公差进行比较。否则你最终会失去时隙。一个好的技术是计算下一个时隙的时间并比较 time() <= next_slot。这样,即使你错过了准确的时间,你也会在不久之后最终命中。

编辑: 您需要为每个间隔单独维护下一个时隙。另外,为避免长期偏差,请使用绝对时间,而不是增量:

curr_time = time.time()

if curr_time >= interval1_next_time:
    interval1_next_time += INTERVAL1_TSLOT
    if curr_time >= interval1_next_time:
        # we lost a full timeslot, so slowly adjust (can also report)
        interval1_next_time += INTERVAL1_TSLOT
    ....
if curr_time >= interval2_next_time:
    interval2_next_time += INTERVAL2_TSLOT
    ....

你说你正在流式传输到一个图表。如果您每秒更新图表 5-10 次左右,对于人类观察者来说它看起来几乎是连续的。所以我会考虑这种可能性:您的图形环境可能有某种计时器滴答,如果没有,您可能会查看标准库 threading.Timer。当数据点到达时,您立即将其添加到数据缓冲区。但是您只在计时器触发时更新图表。您永远不必担心丢失任何数据。我一直在做这种事情,而且在实践中效果很好。