2013-04-17 21 views
7

concurrent.futuresを使用して実行中のプロセスを終了するにはどうすればよいですか?私が理解しているように、cancel()メソッドは、実行中でない場合にキューからプロセスを削除する方法です。しかし、実行中のプロセスを強制終了するのはどうですか?たとえば、長時間実行しているプロセスがあり、GUIの[キャンセル]ボタンを押したときにプロセスを停止したいとします。concurrent.futuresで実行中のプロセスを停止する方法はありますか?

答えて

0

この場合、長時間実行するタスクにはmultiprocessing.Processを使用する方がよいでしょう。

新しいプロセスを開始する前にmultiprocessing.Eventを作成してからを開始してください。子プロセスにこのEventのステータスを定期的にチェックさせ、Event.is_set()Trueを返したときに終了させる。

GUIコードでは、Eventのボタン呼び出しset()に関連付けられたコールバックを持ってください。

0

関連するStackOverflowの質問hereに私の答えを見てください。

つまり、concurrent.futures.ProcessPoolExecutorの中で実行中のプロセスをキャンセルする簡単な方法はないようです。しかし、子プロセスを手動で強制終了することでhackyの方法でそれを達成できます。

関連する問題