如何使while循环花费一定的时间

I. *_*ott -4 python while-loop

我正在使用python为Minecraft pi版制作一个数字时钟.我正在使用包含大量代码的单个while循环 - 执行一次运行需要很短的时间,但它比我想要的还要多几毫秒,这对我的时钟造成了严重破坏.有没有办法让while循环完全准确?我正在使用两个计数time.sleep(1),但执行时间超过两秒.

例:

while True:
    start = time.time()
    for _ in range(5):
        1000**3
    time.sleep(1)
    print (time.time() - start)
Run Code Online (Sandbox Code Playgroud)

每个循环需要超过1秒.

1.00102806091
1.00028204918
1.00103116035
1.00051879883
1.0010240078
1.00102782249
Run Code Online (Sandbox Code Playgroud)

此错误随着时间累积.我怎样才能防止漂移?

Tem*_*olf 7

您可以编写时间同步代码(此示例取自我所拥有的服务器监视器):

# sync time so that it runs every two minutes, in 20 minute cycles (:00, :20, :40)
    time.sleep(1200 - (time.time() % 1200))
    while True:
        # Do stuff
        time.sleep(120 - (time.time() % 120))
Run Code Online (Sandbox Code Playgroud)

如果你想每两秒运行一次:

time.sleep(2 - (time.time() % 2)) 
Run Code Online (Sandbox Code Playgroud)

会让它睡到下一秒,然后跑.除非时间Do stuff超过一个周期,否则这将有效.然后它将跳过一个节拍.

对于时钟,示例输出:

>>> for _ in range(5): 
...     time.sleep(1 - (time.time() % 1)) 
...     print time.time()
1478641441.0
1478641442.0
1478641443.0
1478641444.0
1478641445.0
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为time.time() % 1只提供当前时间的一小部分:0.37例如.当我说它time.sleep(1 - 0.37)睡了0.63几秒钟,这是剩下的时间,直到下一轮.

如果下次0.55运行我的代码需要几秒钟,它将0.45自动休眠.