pythontimesleep单位_python的time.sleep()有多准确?time.sleepfunction的准确性取决于底层操作系统的睡眠准确度。 对于⾮实时操作系统,就像⼀个股票Windows,你可以睡的最⼩时间间隔是10-13ms。 当在10-13ms以上时,我已经看到准确的睡眠时间在⼏毫秒内。
更新:就像在下⾯的⽂档中提到的那样,在⼀个循环中进⾏睡眠是很常见的,如果在早期唤醒你的话,它将确保回到睡眠状态。
我还应该提到,如果您正在运⾏Ubuntu,则可以通过安装rt内核软件包(⾄less在Ubuntu 10.04 LTS中)来尝试伪实时内核(使⽤
RT_PREEMPT补丁集)。
编辑:纠正⾮实时Linux内核有最⼩的睡眠时间间隔接近1毫秒,然后10毫秒,但它以不确定的⽅式变化。
⼈们对操作系统和内核之间的差异是⾮常正确的,但是在Ubuntu中我看不到任何粒度,我在MS7中看到1 ms的粒度。 build议time.sleep 的⼀个不同的实现,不只是⼀个不同的节拍率。 更仔细的检查表明Ubuntu的粒度在1μs左右,但这是由于我⽤来测量精度的time.time函数。
从⽂档 :
另⼀⽅⾯, time()和sleep()的精度优于它们的Unix等价物:时间表⽰为浮点数, time()返回最准确的时间(使⽤Unix gettimeofday如果可⽤))和sleep()将接受⼀个⾮零分数的时间(Unix select是⽤来实现这⼀点,如果可⽤)。linux下的sleep函数
更具体地说, sleep() :
暂停执⾏给定的秒数。 该参数可能是⼀个浮点数,以表⽰更准确的睡眠时间。 实际的中⽌时间可能会less于所要求的时间,因为任何捕捉到的信号都会在执⾏该信号的捕捉程序之后终⽌sleep() 。 ⽽且,由于系统中的其他活动的调度,中⽌时间可能⽐任意量所要求的更长 。
你为什么不知道:
from datetime import datetime import time def check_sleep(amount): start = w() time.sleep(amount) end = w() delta = end-start return delta.seconds + delta.microseconds/1000000. error =
sum(abs(check_sleep(0.050)-0.050) for i in xrange(100))*10 print "Average error is %0.2fms" % error
为了logging,我得到了我的HTPC 0.1毫秒的错误和我的笔记本电脑,这两个Linux机器2毫秒。
这⾥是我对威尔伯特的回答的后续:对于Mac OS X优胜美地,这是相同的,因为它还没有被提及。
看起来好像有很多时间睡在你请求的时间的1.25倍左右,有时候会睡眠你请求的时间的1到1.25倍。 ⼏乎从来没有(约1000个样品中的两倍)睡眠时间明显超过您要求的1.25倍。
另外(没有明确显⽰)1.25的关系似乎保持不错,直到你低于⼤约0.2毫秒,之后它开始有点模糊。 另外,在请求的时间超过20毫秒之后,实际时间似乎⽐您请求的时间长5毫秒。
同样,在OS X中,它似乎是⼀个完全不同的sleep()实现,⽽不是Windows中的任何⼀个Linux核⼼Wilbert所使⽤的。
你不能保证任何有关睡眠的东西,除⾮睡眠时间⾄less要尽最⼤的努⼒才能睡觉(信号可以在时间到了之前消灭你的睡眠,⽽更多的东西可以让它运⾏长)。 可以肯定的是,标准桌⾯操作系统上的最低限度是16ms左右(定时器的粒度加上上下⽂切换的时间),但是当你尝试的时候,提供的参数的偏差会很⼤睡10s毫秒。 信号,其他保持GIL的线程,内核调度的乐趣,处理器的速度步进等等,都可以对线程/进程实际hibernate的持续时间造成破坏。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。