2012-08-13 3 views
5

Ich habe eine Python-GUI, mit der ich verschiedene Aspekte meiner Arbeit testen kann. Derzeit habe ich einen "Stop" -Button, der den Prozess am Ende jedes Tests beendet (es können mehrere Tests eingerichtet werden, um auf einmal ausgeführt zu werden). Einige Tests benötigen jedoch viel Zeit und wenn ich den Test anhalten muss, möchte ich sofort aufhören. Meine Gedanken sind zu verwendenWie kann ich einen Python-Prozess sofort aus einem Tkinter-Fenster anhalten?

Aber ich bin mir nicht sicher, wie ich dies in die nächste Run-Codezeile injizieren würde. Ist das möglich?

+0

Versuchen Sie, einen Python-Prozess oder einen Python-Thread zu stoppen? –

+0

ist es ein separater Thread. –

Antwort

5

Wenn es ein Thread ist, können Sie die untere Ebene verwenden thread (oder _thread in Python 3) Modul durch Aufruf thread.exit() den Faden mit einer Ausnahme zu töten.

Vom documentation:

  • thread.exit(): Heben Sie die SystemExit Ausnahme. Wenn sie nicht abgefangen wird, wird der Thread automatisch beendet.

Ein Reiniger-Methode (je nachdem, wie die Verarbeitung eingerichtet ist), wäre es, den Faden zur Signalverarbeitung und Ausgang zu stoppen eine Instanzvariable verwendet wird, dann die join() Verfahren aus dem Haupt-Thread aufrufen, bis zu warten, Der Thread wird beendet.

Beispiel:

class MyThread(threading.Thread): 

    def __init__(self): 
     super(MyThread, self).__init__() 
     self._stop_req = False 

    def run(self): 
     while not self._stop_req: 
      pass 
      # processing 

     # clean up before exiting 

    def stop(self): 
     # triggers the threading event 
     self._stop_req = True; 

def main(): 
    # set up the processing thread 
    processing_thread = MyThread() 
    processing_thread.start() 

    # do other things 

    # stop the thread and wait for it to exit 
    processing_thread.stop() 
    processing_thread.join() 

if __name__ == "__main__": 
    main() 
+0

Dies ist kein gutes Beispiel für den Zweck des threading.Event. Diese Klasse dient zum Kommunizieren zwischen Threads unter Verwendung der Warte-Methode, im Allgemeinen keine Signalisierung von Exits. In diesem Fall würde eine einfache Instanzvariable gut funktionieren. – Genome

+0

@Genome: Die Antwort wurde entsprechend aktualisiert – pR0Ps

Verwandte Themen