我每隔一秒钟尝试执行代码时会看到时间漂移。我该如何解决?

时间:2017-08-11 07:10:42

标签: python

我正在尝试每1秒执行代码块的方法。我玩过APScheduler,效果很好。根本没有任何时间漂移。我可以无限期地运行它,它不会漂移。

但我正在寻找一种方法,只用time.sleep()

我已经读过并发现:

while True:
    start = time.time()

    function()

    time.sleep(1-(time.time() - start))

是一种常见的解决方案。

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

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

enter image description here

正如你所看到的,从一次迭代开始到结束需要大约1.001秒,所以在大约1000秒后给予或接受,我将会休息一整秒。

有没有人对更准确执行的更好方法有任何想法?

1 个答案:

答案 0 :(得分:0)

除非你确切知道你的函数执行需要多长时间,否则time.sleep对你来说是一个糟糕的选择,首先因为它将使用的代码将假设睡眠之间的函数完全没有时间,第二,因为它没有提供比一秒更大的粒度