Boucle Python à exécuter pendant un certain nombre de secondes

j'ai une boucle while, et je veux continuer à courir à travers pendant 15 minutes. il est actuellement la suivante:

while True:
    #blah blah blah

(ceci passe, puis recommence. J'ai besoin de lui pour continuer à le faire, sauf au bout de 15 minutes il sort de la boucle)

Merci!

19
demandé sur declension 2014-06-24 00:17:35

5 réponses

essaye ceci:

import time

t_end = time.time() + 60 * 15
while time.time() < t_end:
    # do whatever you do

cela va fonctionner pendant 15 min x 60 s = 900 secondes.

Function time.time renvoie l'heure courante en secondes depuis le 1er janvier 1970. La valeur est en virgule flottante, donc vous pouvez même l'utiliser avec une précision de sous-seconde. Au début, la valeur t_end est calculée comme étant "maintenant" + 15 minutes. La boucle s'exécute jusqu'à ce que l'heure courante dépasse cette heure de fin prédéfinie.

53
répondu DrV 2014-06-23 20:34:22

Si je vous comprends, vous pouvez le faire avec un datetime.timedelta -

import datetime

endTime = datetime.datetime.now() + datetime.timedelta(minutes=15)
while True:
  if datetime.datetime.now() >= endTime:
    break
  # Blah
  # Blah
3
répondu Elliott Frisch 2014-06-23 20:35:14

Simplement, Vous pouvez le faire

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
0
répondu Hasan Latif 2017-10-10 19:54:01

je cherchais une boucle temporelle plus facile à lire lorsque j'ai rencontré cette question ici. Quelque chose comme:

for sec in max_seconds(10):
      do_something()

alors j'ai créé ce helper:

# 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

cela ne fonctionne qu'avec des secondes entières, ce qui était correct pour mon cas d'utilisation.

Exemples:

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

soyez conscient que l'intervalle n'est pas si précis, car je n'attends que quelques secondes (le sommeil n'a jamais été bon pour moi avec des temps < 1 sec). Donc si votre travail prend 500 ms et que vous demandez un intervalle de 1 sec, vous serez appelé à: 0, 500ms, 2000ms, 2500ms, 4000ms et ainsi de suite. On pourrait corriger cela en mesurant le temps dans une boucle plutôt que dans le sommeil() ...

0
répondu Sascha N. 2018-02-01 12:34:17

essaye ceci:

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
-2
répondu anonmak9 2017-07-26 23:49:24