Python循环运行指定时间秒数
我有一个循环,想让它持续运行15分钟。现在的代码是:
while True:
#blah blah blah
(这个循环会一直运行,然后重新开始。我希望它能继续这样做,但在15分钟后退出循环)
谢谢!
7 个回答
对于使用 asyncio 的朋友们,有个简单的方法就是用 asyncio.wait_for()
:
async def my_loop():
res = False
while not res:
res = await do_something()
await asyncio.wait_for(my_loop(), 10)
我在这里看到一个问题,想找一个更容易理解的时间循环,类似这样的:
for sec in max_seconds(10):
do_something()
于是我创建了这个辅助工具:
# allow easy time-boxing: 'for sec in max_seconds(42): do_something()'
def max_seconds(max_seconds, *, interval=1):
interval = int(interval)
start_time = time.time()
end_time = start_time + max_seconds
yield 0
while time.time() < end_time:
if interval > 0:
next_time = start_time
while next_time < time.time():
next_time += interval
time.sleep(int(round(next_time - time.time())))
yield int(round(time.time() - start_time))
if int(round(time.time() + interval)) > int(round(end_time)):
return
这个工具只适用于完整的秒数,这对我的需求来说是可以的。
举个例子:
for sec in max_seconds(10) # -> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
for sec in max_seconds(10, interval=3) # -> 0, 3, 6, 9
for sec in max_seconds(7): sleep(1.5) # -> 0, 2, 4, 6
for sec in max_seconds(8): sleep(1.5) # -> 0, 2, 4, 6, 8
要注意的是,间隔时间并不是特别准确,因为我只等待完整的秒数(对于小于1秒的时间,使用sleep方法对我来说一直效果不好)。所以如果你的任务需要500毫秒,而你请求的间隔是1秒,那么你会在以下时间点被调用:0秒、500毫秒、2秒、2.5秒、4秒,依此类推。其实可以通过在循环中测量时间来解决这个问题,而不是使用sleep() ...
在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有些人可能在使用某个工具或库的时候,发现它的功能和效果跟自己预期的不太一样。这种情况很常见,尤其是对于刚入门的编程小白来说。
在这种情况下,最重要的是要耐心,逐步分析问题的根源。可以尝试查阅相关的文档,看看有没有人遇到过类似的问题,或者在网上搜索一下,看看有没有解决方案。很多时候,社区里会有经验丰富的人分享他们的经验和解决办法。
另外,写代码的时候,保持代码的整洁和可读性也是非常重要的。这样不仅能帮助自己更好地理解代码,也能让别人更容易看懂你的代码。如果遇到困难,不妨把问题拆分成小部分,逐一解决,这样会更有效率。
总之,编程是一项需要不断学习和实践的技能,遇到问题时不要气馁,积极寻求帮助和解决方案,慢慢你就会变得越来越熟练。
import time
delay = 60*15 # For 15 minutes delay
close_time = time.time()+delay
while True:
# ...
if time.time() > close_time:
break
如果我理解你的意思,你可以使用一个叫做 datetime.timedelta
的东西来实现这个功能 -
import datetime
endTime = datetime.datetime.now() + datetime.timedelta(minutes=15)
while True:
if datetime.datetime.now() >= endTime:
break
# Blah
# Blah
试试这个:
import time
t_end = time.time() + 60 * 15
while time.time() < t_end:
# do whatever you do
这个代码会运行15分钟,也就是15分钟乘以60秒,等于900秒。
函数 time.time
会返回从1970年1月1日到现在的时间,单位是秒。这个值是浮点数,所以你可以用它来计算小于一秒的时间。开始时,计算出的结束时间 t_end 是“现在的时间”加上15分钟。这个循环会一直运行,直到当前时间超过这个设定的结束时间。