Est-il possible d'écrire une commande afin qu'il annule un appel de fonction en cours d'exécution?

StackOverflow https://stackoverflow.com/questions/3621111

  •  26-09-2019
  •  | 
  •  

Question

J'ai un widget temps écoulé mesures, puis après une certaine durée, il effectue une commande. Toutefois, si le widget reste que je veux, je le veux pour annuler cet appel de fonction et ne pas faire la commande.

Comment puis-je aller à ce sujet?

Était-ce utile?

La solution

Utilisez le module threading et commencer un nouveau thread qui exécutera la fonction.

Il suffit de faire avorter la fonction est une mauvaise idée que vous ne savez pas si vous interrompez le fil dans une situation critique. Vous devriez prolonger votre fonction comme ceci:

import threading

class WidgetThread(threading.Thread):
     def __init__(self):
         threading.Thread.__init__(self)
         self._stop = False

     def run(self):
        # ... do some time-intensive stuff that stops if self._stop ...
        #
        # Example:
        #  while not self._stop:
        #      do_somthing()

     def stop(self):
         self._stop = True



# Start the thread and make it run the function:

thread = WidgetThread()
thread.start()

# If you want to abort it:

thread.stop()

Autres conseils

Pourquoi ne pas utiliser des fils et arrêter ça? Je ne pense pas qu'il soit possible d'intercepter un appel de fonction dans un seul programme fileté (sinon avec une sorte de signal ou d'interruption).

En outre, votre problème spécifique, vous voudrez peut-être présenter un drapeau et vérifier que dans la commande.

aucune idée de fils de python, mais en général la façon dont vous interrompez un fil est en ayant une sorte d'un objet d'état threadsafe que vous pouvez définir à partir du widget, et la logique dans le code de fil pour vérifier le changement d'objet d'état la valeur et de sortir de la boucle de fil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top