107 votes

Comment arrêter une boucle while après un certain temps ?

Comment arrêter une boucle while après 5 minutes si elle n'atteint pas ce que je veux qu'elle atteigne.

while true:
    test = 0
    if test == 5:
        break
    test = test - 1

Ce code me jette dans une boucle sans fin.

1voto

kennyut Points 42

Je veux partager celle que j'utilise :

import time
# provide a waiting-time list:
lst = [1,2,7,4,5,6,4,3]
# set the timeout limit
timeLimit = 4

for i in lst:
    timeCheck = time.time()
    while True:
        time.sleep(i)
        if time.time() <= timeCheck + timeLimit:
            print ([i,'looks ok'])
            break
        else:
            print ([i,'too long'])
            break

Alors vous aurez :

[1, 'looks ok']
[2, 'looks ok']
[7, 'too long']
[4, 'looks ok']
[5, 'too long']
[6, 'too long']
[4, 'looks ok']
[3, 'looks ok']

0voto

Batselot Points 74

Je l'ai lu mais je veux juste demander quelque chose, est-ce que quelque chose comme ce que j'ai écrit ne fonctionnerait pas du tout ? J'ai fait le test pour 5, 10 et 20 secondes. Le temps n'est pas exactement exact mais ils sont vraiment proches des valeurs réelles.

import time

begin_time=0
while begin_time<5:

    begin_time+=1
    time.sleep(1.0)
print("The Work is Done")

0voto

drascom Points 31

Je ne suis pas un expert en python mais j'ai écrit une petite fonction pour vérifier le timeout et freiner la boucle while.

# compare now and given times older than delta
def is_time_older_than(time, delta):
    print(dt.utcnow() - time,delta)
    if (dt.utcnow() - time) > delta: 
        return True
    return False
startTime = dt.utcnow()
while True:
           print("waiting")
           if (is_time_older_than(startTime, timedelta(seconds=5)) == True):
                break

vous pouvez enregistrer le temps avant l'exécution et l'envoyer à la fonction comme temps de départ avec la valeur delta en secondes (ou 60*1 pour une minute), elle comparera la différence et retournera Faux ou Vrai, c'est tout.

0voto

Dhifaoui Bilel Points 21

Essayez ce qui suit :

from datetime import datetime, timedelta

end_time = datetime.now() + timedelta(minutes=5)
while True:
    current_time = datetime.now()
    if current_time == end_time:
        break

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X