哪个更适合用于Python中的计时?time.clock()或time.time()?哪一个提供更准确?
例如:
start = time.clock()
... do something
elapsed = (time.clock() - start)
Run Code Online (Sandbox Code Playgroud)
与
start = time.time()
... do something
elapsed = (time.time() - start)
Run Code Online (Sandbox Code Playgroud) 我可以给它浮点数,比如
time.sleep(0.5)
Run Code Online (Sandbox Code Playgroud)
但它有多准确?如果我给它
time.sleep(0.05)
Run Code Online (Sandbox Code Playgroud)
它真的睡了大约50毫秒?
这是对我之前的问题的延伸
我现在从互联网收集的内容,所有调用阻塞调用的进程都会进入休眠状态,直到调度程序找到解除阻塞的原因.原因可以从缓冲区空到缓冲区满到任何其他条件.
但是,这可以成为实时的有效方式,让我们说硬/实时应用程序?由于当解除阻塞条件成立时,进程未被解锁,而是当调度程序给出他的CPU切片时,并且解除阻塞条件都为真.
好像你想要一个响应式解决方案,我不这样做"旋转锁"或"忙等待"是正确的方法,CPU切片被浪费,整个系统将无法响应或可能响应不佳.
有人可以清楚这个相互矛盾的想法.
我正在使用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功能?或者没有人关心准确的时间测量吗?