Python:在精确时间内运行循环

4

我需要在精确的时间段内运行一个循环。例如,我尝试编写的代码应该如下所示:

initialize and lauch timer

while timer<10000sec:
   do things

你知道如何做到这一点吗?

谢谢 :)


在给定的时间后,do things应该被中止还是应该先完成? - plundra
整个“做事情”的过程必须完成,因此不能在计时器结束时中止。 - Nix
你需要多精确,为什么? - Karl Knechtel
我必须精确到秒(加上循环发生的时间)。这段代码是用来测试服务器容量的,因此精度并不关键。 - Nix
2个回答

6
stop = time.time()+10000
while time.time() < stop:
  do things

这要求每次循环都足够短,以便您足够频繁地读取当前时间(为了达到您想要的精度)。


另一方面,如果循环体非常短,在每次迭代中调用time.time()可能会占据运行时间的主导地位。我的意思是,如果性能在这里非常关键,他可以考虑另一种方法。 - Eli Bendersky
这段代码运行得非常完美。但如果有更省电的方法,我会更喜欢。 - Nix
1
@Nix:你需要解释一下“做事情”到底是什么意思。在良好的编程中,当你等待某些事情发生时,应该使用阻塞而不是轮询:这种(糟糕)的方法称为“忙等待”。如果你需要忙等待,可以将time.sleep(delay)的调用放入循环中,其中delay可以是0.2等值。 - Martin v. Löwis

1
import time

t_end = time.time() + 60 * <> #duration goes inside <>; eg 2 for 2 minutes

while time.time() < t_end:

   #rest of the code

请记住,Stack Overflow 不仅旨在解决当前的问题,还要帮助未来的读者找到类似问题的解决方案,这需要理解底层代码。对于我们社区中的初学者和不熟悉语法的成员来说,这尤其重要。鉴于此,您能否编辑您的答案,包括您正在做什么以及为什么您认为这是最好的方法的解释 - Jeremy Caney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接