我有一个while循环,我希望它能持续运行15分钟。它目前是:
while True:
#blah blah blah
(这会运行,然后重新启动。我需要它继续执行此操作,除非它在15分钟后退出循环)
谢谢!
答案 0 :(得分:68)
试试这个:
import time
t_end = time.time() + 60 * 15
while time.time() < t_end:
# do whatever you do
这将持续15分钟x 60秒= 900秒。
函数time.time
返回自1970年1月1日以来的当前时间(秒)。该值为浮点数,因此您甚至可以使用亚秒精度。在开始时,值t_end计算为“现在”+ 15分钟。循环将一直运行,直到当前时间超过此预设结束时间。
答案 1 :(得分:3)
如果我了解你,你可以使用datetime.timedelta
-
import datetime
endTime = datetime.datetime.now() + datetime.timedelta(minutes=15)
while True:
if datetime.datetime.now() >= endTime:
break
# Blah
# Blah
答案 2 :(得分:0)
只需你可以做到
import time
delay=60*15 ###for 15 minutes delay
close_time=time.time()+delay
while True:
##bla bla
###bla bla
if time.time()>close_time
break
答案 3 :(得分:0)
当我在这里遇到这个问题时,我正在寻找一个更容易阅读的时间循环。类似的东西:
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秒)。因此,如果你的工作需要500毫秒并且你要求间隔1秒,你将被调用:0,500毫秒,2000毫秒,2500毫秒,4000毫秒等等。人们可以通过测量循环中的时间而不是睡眠来解决这个问题()......
答案 4 :(得分:0)
对于使用asyncio的用户来说,一种简单的方法是使用asyncio.wait_for()
:
async def my_loop():
res = False
while not res:
res = await do_something()
await asyncio.wait_for(my_loop(), 10)
答案 5 :(得分:-2)
试试这个:
import time
import os
n = 0
for x in range(10): #enter your value here
print(n)
time.sleep(1) #to wait a second
os.system('cls') #to clear previous number
#use ('clear') if you are using linux or mac!
n = n + 1