2012-08-13 8 views
5

私は自分の仕事のさまざまな側面をテストするために使用するPython GUIを持っています。現在、私は各テストの終了時にプロセスを終了させる「停止」ボタンを持っています(複数のテストを一度に実行できるように設定できます)。しかし、いくつかのテストには時間がかかります。テストを中止する必要がある場合は、即座に停止したいと考えています。私の考えは、使用することですTkinterウィンドウからPythonプロセスを即座に停止するにはどうすればいいですか?

import pdb; pdb.set_trace() 
exit 

しかし、私はどのように私は次の実行行に注入するか分からない。これは可能ですか?

+0

あなたはpythonのプロセスやPythonのスレッドを停止しようとしていますか? –

+0

それは別のスレッドです。 –

答えて

5

スレッドの場合は、thread(またはPython 3の_thread)モジュールを使用して、例外を指定してスレッドを終了させることができます。thread.exit()を呼び出します。 documentationから

  • thread.exit():SystemExit例外を発生させます。キャッチされていない場合、 これはスレッドをサイレントモードで終了させます。 (あなたの処理が設定されている方法に応じて)

クリーナー方法は、それまで待機するメインスレッドからjoin()メソッドを呼び出し、インスタンス変数を使用して処理し、出口を停止するスレッドを通知するであろうスレッドは終了します。

例:

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

これはthreading.Eventの目的の良い例ではありません。このクラスは、waitメソッドを使用してスレッド間で通信するためのもので、一般にexitを通知するものではありません。この場合、単純なインスタンス変数は正常に動作します。 – Genome

+0

@Genome:それに応じて回答を更新しました – pR0Ps

関連する問題