3

私は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) 

しかし、セロリの作業員監督者のプロセスは、数回の試行後に諦めずに死にかけるのではなく、すぐに終了するセロリの作業者プロセスを迅速に作成します。

セロリの作業の外からセロリワーカープロセスの死を知らせる方法はありますか?

答えて

0

同様の問題がありました。私は労働者を管理するための別のスクリプトを作成しました。

ループを無限ループで作成し、必要な時間スリープした後、ワーカープロセスを作成/強制終了します。

while True: 
    time.sleep(5) 
    # create workers if possible 
    # kill stale workers if not required. 
関連する問題