2011-09-17 34 views
0

私は複数のデーモンスレッドを使用するPythonプログラムを持っています。私は外部から、できれば別のPythonスクリプトからプログラムを停止したいと思っています。マルチスレッドのPythonスクリプトを外部から停止する方法

シェルからkill <pid>を試しましたが、テストのためだけでしたが、マルチスレッドスクリプトでは機能しません。

1つの方法は、終了のフラグとしてプログラムがn秒ごとに何らかのファイルをチェックするようにすることです。私はこれを行うためのよりよい方法があると確信しています。

私はプログラムをきれいに止めたいので、例外の形で外部からのメッセージが理想的だと思います。

EDIT:ここで私は、現時点ではそれをやった方法の例です

try: 
    open('myprog.lck', 'w').close() 
    while True: 
     time.sleep(1) 
     try: 
      open('myprog.lck').close() 
     except IOError: 
      raise KeyboardInterrupt 
except KeyboardInterrupt: 
    print 'MyProgram terminated.' 

削除ファイルmyprog.lckは、スクリプトが停止します。上の例はこれを行うには悪い方法ですか?

+0

'kill 'を使ってデフォルトの' TERM'以外のシグナルを送信しようとしましたか?プロセスが本当に誤動作している場合は、常に 'KILL'(' kill -KILL ')を使うことができます。 – icktoofay

+1

マルチプロセスまたはマルチスレッドを意味しますか? – agf

+0

@icktoofayプログラムは完璧に動作しています。私は、別のPythonスクリプトからプログラムを停止したり、再起動したりしたいだけです。この混乱を避けるために質問を編集します。 – Rainbow

答えて

2

ポイズンピル技術を使用してください。丸薬(特別なメッセージ)を受け取ったら、あなたのプログラムはそれを処理しなければなりません。あなたがそれをうまくやっている方法ですが、よりエレガントなもののために、あなたはあなたの "殺しのスクリプト"とメインプログラムはじめに、標準ライブラリでInterprocess Communication and Networkingを調べてください。

0

kill -9 <pid>でシェルから削除できます。

関連する問題