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)
此错误随着时间累积.我怎样才能防止漂移?
您可以编写时间同步代码(此示例取自我所拥有的服务器监视器):
# 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自动休眠.
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |