我正在玩 python 标准库中的 time.sleep 函数,发现它不适合 sub-ms 延迟。通过测试,我发现它实际上等待 1.1-1.2 毫秒等待 1 毫秒。实施繁忙的等待使准确度在 1% 以内。我用了:
def busy_wait(dt):
current_time = time.time()
while (time.time() < current_time+dt):
pass
并且可以在 0.0001 秒内降低 1% 的准确度。
我的主要问题是:
- 为什么睡眠功能如此不准确(可能是 C 问题)?获得具有更高时钟速度的更好的 CPU 会改变这种情况吗?
- 为什么有人会使用睡眠?我看到的唯一优势,节能,仅限于嵌入式系统,不是吗?
- 通过校准来补偿睡眠的不准确性是否可行?像这样:
定义睡眠(dt): 睡眠(校准功能(dt))
顺便说一句,我读到即使等待时间长,睡眠也不能很好地发挥作用:Python time.sleep() 的上限? 我还在 SO 上的某处读到了制作更短时间间隔的循环以提高精度,但是当我想延迟 0.01 秒时这是没用的。Karl Voigtland提到使用 ctypes 的 nanosleep,但我觉得这太过分了, time.sleep 应该做它的预期行为。
time.sleep 是一个损坏的 python 功能?还是没有人足够关心准确的时间测量?