JDo*_*ong 9 python performance sleep wait
我正在使用python标准库中的time.sleep函数,发现它不适合亚毫秒延迟.从测试中我发现实际等待1到1毫秒等待1.1-1.2毫秒.实现忙碌等待使准确度达到1%以内.我用了:
def busy_wait(dt):
current_time = time.time()
while (time.time() < current_time+dt):
pass
Run Code Online (Sandbox Code Playgroud)
并且可以在降低1%准确度之前下降到0.0001秒.
我的主要问题是:
def sleep(dt):
sleep(calibration_function(dt))
顺便说一句,我读到睡眠甚至不能很长时间等待:Python time.sleep()的上限? 我也在某处读到了制作一个更短时间间隔的循环来提高精度,但是当我想延迟0.01秒时,这是没用的.Karl Voigtland提到使用ctypes的nanosleep,但我觉得这有点过分,而且time.sleep应该做它的预期行为.
time.sleep是一个破碎的python功能?或者没有人关心准确的时间测量吗?
在Windows上,OS Sleep功能(Python必然使用)只能在当前定时器间隔的倍数上唤醒一个线程.通常,其范围在1.0毫秒至15.6毫秒之间.降低定时器间隔可以很方便,因为它允许更短的睡眠,但它浪费电力,正如我在本文中所写:
http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/
忙碌的等待可能会提供更好的准确性,但通常是一个可怕的想法,因为它浪费更多的电力,并从更值得的任务窃取CPU时间:
https://randomascii.wordpress.com/2012/06/05/in-praise-of-idleness/
最后,忙等待的准确性取决于您用于获取当前时间的定时器功能,也可能取决于定时器间隔:
https://randomascii.wordpress.com/2013/05/09/timegettime-versus-gettickcount/
为什么你想睡这么短的时间?通常最好等待一些事情发生 - 等待事件 - 而不是等待如此短的时间段.
| 归档时间: |
|
| 查看次数: |
10731 次 |
| 最近记录: |