私はcelery.signals.worker_process_init
の外部サーバーへのソケットを1つ作成するセロリのワーカープロセスがあります。接続が確立されず、例外が発生した場合、セロリの作業者が開始されず、これが意図された動作です。プロセスの再起動のためのセロリのワーカープロセスを殺す方法
このソケットクラスは、threading.Timer
を使用して、時々ハートビートパケットを送信します。残念なことに、Timerスレッドには特別な例外処理がないので、接続に何か問題が発生した場合でもワーカーは終了しません。
私は読み書き動作し、優雅に、現在のワーカープロセスを停止するには、物事の束を試してみましたが、私のソケットからの例外キャッチ開始:
:sys.exit(1) # Doesn't kill the worker process (because it's running in a thread?)
次の試みを、私はそれがcelery/billiard
問題のどこかに言及しました
raise SystemExit("Socket error") # Same, I guess
この作品:
os.kill(os.getpid(), signal.SIGHUP)
しかし、セロリの作業員監督者のプロセスは、数回の試行後に諦めずに死にかけるのではなく、すぐに終了するセロリの作業者プロセスを迅速に作成します。
セロリの作業の外からセロリワーカープロセスの死を知らせる方法はありますか?