【问题标题】:How to get system boot time with millisecond precision?如何以毫秒精度获得系统启动时间?
【发布时间】:2021-08-09 12:25:45
【问题描述】:

我正在使用 pyaudio 来映射一些对时间敏感的信息,当它返回输入缓冲时间为自正常运行时间以来的秒数时,即{'input_buffer_adc_time': 4349.296026752835},我必须手动计算它的datetime。理想情况下,我想知道大约 1ms 精度的块开始时间,所以我不能使用 psutil.boot_time() 因为它会完全下降毫秒,即

In [189]: psutil.boot_time()
Out[189]: 1626895334.0

我试过从proc 读取正常运行时间,就像这样

def uptime_delta():
    """
    Get delta between system uptime and unix timestamp
    :return: float of unix timestamp delta, result of unixtimestamp now - uptime
    """
    with open("/proc/uptime") as f:
        uptime = float(f.read().split()[0])
        now = datetime.now().timestamp()
        return now - uptime

但它给出的结果非常不一致

In [173]: uptime_delta()
Out[173]: 1626895334.92133

In [174]: uptime_delta()
Out[174]: 1626895334.913

在此示例中,两次运行之间存在 8 毫秒的差异,但我看到了 20 多毫秒的差异。

到目前为止,我已经决定使用

In [186]: mean([uptime_delta() for x in range(1000)])
Out[186]: 1626895334.9171343

这是一致的,但需要 16.6 毫秒来计算,总体而言似乎是一个愚蠢的想法。最重要的是,我在树莓派上运行它,它没有稳定的电源或网络,这意味着如果我只在运行时计算一次,NTP 很有可能会在运行中的某个地方同步,把一切都搞砸了。

有没有更好的方法可以准确地确定启动时间或 pyaudio 的块时间?

感谢您的宝贵时间。

【问题讨论】:

    标签: python time pyaudio


    【解决方案1】:

    我最终使用了time.monotonic()

    使用上面的函数读取/proc/uptime 10000 次给了我最多 10 毫秒的偏差。 time.time() - time.monotonic() 小于 0.006 毫秒

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2013-08-02
      • 1970-01-01
      相关资源
      最近更新 更多