Python 当我试图每秒钟执行一次代码时,我会看到时间漂移。我该如何解决这个问题?

Python 当我试图每秒钟执行一次代码时,我会看到时间漂移。我该如何解决这个问题?,python,Python,我正在试验每1秒执行代码块的方法。我已经玩过ApsScheduler,它工作得非常好。根本没有时间漂移。我可以无限期地运行它,它不会漂移 但是我正在寻找一种只需time.sleep()就可以完成的方法 我四处阅读,发现: while True: start = time.time() function() time.sleep(1-(time.time() - start)) 这是一个常见的解决方案 然而,我已经测试了一段时间,我看到了一些漂移 此图显示了start

我正在试验每1秒执行代码块的方法。我已经玩过ApsScheduler,它工作得非常好。根本没有时间漂移。我可以无限期地运行它,它不会漂移

但是我正在寻找一种只需
time.sleep()
就可以完成的方法

我四处阅读,发现:

while True:
    start = time.time()

    function()

    time.sleep(1-(time.time() - start))
这是一个常见的解决方案

然而,我已经测试了一段时间,我看到了一些漂移

此图显示了
start=time.time()
之后的
print datetime.now()

正如你所看到的,从一个迭代的开始到结束大约需要1.001秒,所以在大约1000秒的取舍之后,我将离开整整一秒


有人知道如何更好地执行更精确的函数吗?

除非您确切知道函数执行所需的时间,
时间。睡眠对您来说是一个糟糕的选择,首先,因为它将在其中使用的代码将假定睡眠之间的函数根本不需要时间,其次,因为它提供的粒度不超过1秒

如果您想使用sleep方法,您可以实现一个闭环控制循环,例如以某种方式保持时间段的稳定。这里有一个简单的类型(抱歉,我无法正常回复):从datetime导入time导入datetime def do_something():time.sleep(0.01)delta_t=1 period=1 current_time=time.time()next_time=current_time,而True:current_time=time.time()delta_t-=(current_time-next_time)*0.9打印(delta_t)打印(datetime.now())do_something()time.sleep(delta_t)next_time=current_time+period我不知道为什么它被标记为重复…,链接的答案是另一个。(当然,它显示了如何实现计时,但我看到你的问题是使用sleep方法来实现的…)