在python中准确地睡眠不到一秒钟

时间:2018-09-03 06:30:24

标签: python

如何在python中准确地暂停设置的时间长度。

我尝试过:

import time
time.sleep(amount)

(数量=时间长度小于1秒)

但这不是很准确,还有什么更好的办法吗?

(Windows 10、64位)

2 个答案:

答案 0 :(得分:1)

sleep永远不会比操作系统的滴答频率更准确,对于Windows,它处于10ms-16ms范围内,而在Linux中,它可以低至1ms(具体取决于操作系统),但通常会更高,就像Windows < / p>

如果您想要更高精度的睡眠,并且如果您使用的是Linux,则可以考虑使用nanosleep(),它是一个高精度的睡眠函数,不幸的是,任何内置库中的python都不会公开它-因此您将需要创建一个小的.so文件,将其公开给python(通过将其与ctypes一样导入,或者通过使用cpython制作C python模块),根据文档的功能将与计时器本身一样精确

还有一些针对Windows的高精度解决方案-但我从未使用过它们中的任何一个,因此我没有资格推荐在Windows上使用的解决方案(但同样,您将需要一个.dll来将此类方法公开给python)

话虽如此,如果您不关心用电量,您可以忙着睡:

import time
def busy_sleep(seconds_to_sleep):
    start = time.time()
    while (time.time() < start + seconds_to_sleep):
        pass

然后您可以像这样busy_sleep(0.005)来称呼它,它将几乎准确地“睡眠” 0.005秒,因为空气中的“ sleep”实际上并没有使您一直处于睡眠状态,因此一直在忙于100%,但如果对您而言重要的是以精确的方式延迟执行,它仍然可能对您有用

答案 1 :(得分:0)

您尝试过吗? 如果我使用time.sleep(1),它将等待一秒钟。 所以,

time.sleep(0.33333333333) 
# a third of a second pause.#
time.sleep(0.5)
# a half of a second pause.#

,依此类推。很抱歉,如果这没有按照您的意愿提出您的问题!