Python循环运行一定的秒数

时间:2014-06-23 20:17:35

标签: python time timer while-loop

我有一个while循环,我希望它能持续运行15分钟。它目前是:

while True:
    #blah blah blah

(这会运行,然后重新启动。我需要它继续执行此操作,除非它在15分钟后退出循环)

谢谢!

6 个答案:

答案 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