我在玩python标准库中的time.sleep函数,发现它不适合sub-ms延迟。从测试中,我发现它实际上等待1.1-1.2毫秒,等待1ms。实施繁忙的等待将精度降至1%以内。我使用:Python time.sleep与繁忙的等待准确性
def busy_wait(dt):
current_time = time.time()
while (time.time() < current_time+dt):
pass
并且可能下降到0.0001秒,然后打破1%的准确度。
主要问题,我有是:
- 为什么睡眠功能如此不准确(可能是C的问题)?用更高的时钟速度获得更好的CPU会改变这一点吗?
- 为什么会有人使用睡眠?我看到的唯一优势是节能,仅限于嵌入式系统,不是吗?
- 补偿睡眠不准确的校准是否可行?像这样:
def sleep(dt): sleep(calibration_function(dt))
顺便说一句,我读了睡眠甚至不长的等待时间发挥良好作用:Upper limit in Python time.sleep()? 我也看了这么短的制作时间间隔的循环来提高精确度的某处,但是当我想延迟0.01秒时,这是毫无用处的。 Karl Voigtland提到使用ctypes的nanosleep,但我觉得这是矫枉过正,那time.sleep应该做它的预期行为。
time.sleep是一个破损的python特性?或者没有人关心准确的时间测量吗?
python's time.sleep()有多准确?](http://stackoverflow.com/questions/1133857/how-accurate-is-pythons-time-sleep) – g19fanatic
是的,我认为这是一个OS调用,但现在我想知道为什么他们在忙碌的等待更好时使用OS调用。 – JDong
一个繁忙的等待会消耗CPU时间并阻塞一个cpu。睡眠可以进行上下文切换,并且不会阻止其他执行(它会'阻止'执行)。一般来说,如果你确实需要确切的时间,那么你只能忙于等待,即使如此,你仍然仅限于操作系统对CPU的需求,这可能会背离你,无论如何... – g19fanatic