私は複数のデーモンスレッドを使用する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
は、スクリプトが停止します。上の例はこれを行うには悪い方法ですか?
'kill 'を使ってデフォルトの' TERM'以外のシグナルを送信しようとしましたか?プロセスが本当に誤動作している場合は、常に 'KILL'(' kill -KILL ')を使うことができます。 –
icktoofay
マルチプロセスまたはマルチスレッドを意味しますか? – agf
@icktoofayプログラムは完璧に動作しています。私は、別のPythonスクリプトからプログラムを停止したり、再起動したりしたいだけです。この混乱を避けるために質問を編集します。 – Rainbow