Qu'est-ce que j'essaie de faire est d'imprimer ou d'exécuter une certaine chaîne après
certain temps, dans le cas de cette fonction, il est 20 secondes,
Le problème est sur la deuxième boucle, c'est sûr qu'il attend 20 secondes sur la première boucle,
Mais la deuxième boucle, il n'attend plus, il ne cesse pas d'imprimer ..
Pourquoi cela arrive-t-il? Et comment puis-je le résoudre?
4 Réponses :
Vous devez réinitialiser Startlog entre les appels vers Tess qui "réussissent" (ont passé 20 s), ce code fonctionne comme vous le souhaitez (mais est laide à cause des variables globales).
import time
startlog = time.time()
def tess():
global startlog
if time.time() - 20 > startlog:
print('its been 20 secs')
startlog = time.time()
tm = 0
while True:
tm += 1
print(tm)
tess()
time.sleep(1)
J'ai utilisé ceci et il dit que Startlog est indéfini
@Redgartech sur quelle ligne?
Désolé de ne pas répondre plus tôt. Je suis incapable de répondre actuellement. J'ai exécuté le programme dans mon programme et cela ne fonctionnait pas comme un gestionnaire d'exception. Il y avait une liste d'erreurs comme une exception à mon programme.
@Redgartech On dirait que vous ne l'avez pas utilisé correctement, car "StartLog" est défini dans mon exemple (voir startlog = time.time () code>)
Yah ça n'a pas travaillé pour moi. Il a continué à dire que Startlog n'était pas défini.
@Redgartech en utilisant mon exacte b> code? Si oui, sur quelle ligne?
Seul, cela fonctionne simplement bien mais pas dans mon programme plus vaste comme une exception. Je voulais que ce soit juste comme ça seul comme une exception.
@Redgartech pour que le problème ne soit pas avec une solution, c'est que vous ne comprenez pas comment l'utiliser? Si je suis correct, veuillez poster une nouvelle question sur l'aide au lieu de commenter.
Vous devez changer ou juste attendre 20 secondes: start = time.time () code> à startlog = hétrage () code> et définir une telle variable comme global code> ou non loCal code>: temps.sleep (20) code> p> p> p> p> P> P> P>
Et définir le global car le début est sur une fonction
Vous devez mettre à jour votre boucle intérieure de démarrage à l'intérieur de la fonction Tess (). Vous devez remplacer avec: p>
On dirait que vous essayez de courir quelque chose pendant 20 secondes en arrière-plan, puis exécutez votre fonction.
Si tel est le cas, vous enfilez / multiprocessing a plus de sens. P>
Ce décorateur , votre code pourrait être réécrit comme p >
@time_limit(20)
def will_stop_after_20_secs():
print ("doing stuff")
time.sleep(20)
will_stop_after_20_secs()
print ("20 seconds had passed")
L'indentation semble mal dans def Tess ()
Toute raison en utilisant le sommeil (20) ne fonctionnerait pas?
J'ai écrit une réponse mais j'ai réalisé que je ne comprends pas la logique. Il devrait exécuter la fonction toutes les 20 secondes, la minuterie étant réinitialisée après chaque exécution? Qu'est-ce que
commence code> pour?... Mais c'est votre question, si sûrement, vous comprenez ce que vous visez?
En avez-vous besoin d'imprimer toutes les 20 secondes ou une fois que 20 secondes sont écoulées? Parce que si vous avez besoin d'une sortie imprimée toutes les 20 secondes peut-être qu'un planificateur pourrait être un moyen facile de le faire?
start = time.time () code> semble inutile depuisDémarrer code> n'est jamais utilisé.Cela semble de plus en plus comme une faute de frappe.
startlog code>! =Démarrer code>Vous devez définir le
StartLog global code> dans la fonctionMerci, oui, la variable globale résout, je n'y pensais pas.
Les variables globales sont une mauvaise pratique, en particulier dans ce contexte. En utilisant
filetage code> /multiprocessionnaire code> est le moyen standard d'aller.