私はslurmジョブ用のスケジューラスクリプトをPythonで記述しようとしています。親プロセスが終了しても、スレッドをPythonで起動し続けるには?
基本的には、私は関数に含まれるスクリプトを持っています。job_array_scheduler()
と呼んで、それにはtime.sleep()
というループが含まれています。これは1日以上実行される予定です。私はこの機能をセッション内で終了することができるように、Python内部から別のスレッドとしてこの機能をオフにすることができるようにしたいと考えています。
私はそうのようにそれをやってみました:
import threading
scheduler_thread = threading.Thread(target=job_array_scheduler, args=args, daemon=True)
scheduler_thread.start()
が、私はPythonのセッション(ちょうどexit
とのすなわち)を終了したときに、これは終了します。
これを回避するには、上記のスレッドを生き残らせるために、私はPythonセッションを終了するか、ユーザーをログオフすることができますか?私は上記を包み込むように別スクリプトを書いていると考えることができますので、私はpython wrapper_script.py &
ような何かをやってシェルからバックグラウンドで実行することができますが、私は私がしなければならないとすることを避けることを好むだろう
唯一の方法私がしたいと思うそれぞれの仕事のための別々の外側のスクリプトを書いてください。
スレッドの代わりに 'multiprocessing'を使ってプロセスを使用します(これは、PythonではGILのおかげで期待通りに動作しません) – GPhilo