【发布时间】: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 的块时间?
感谢您的宝贵时间。
【问题讨论】: