Python RQを使用して、ワーカープロセスを動的に管理しようとしています。カスタムビルドのワーカースクリプトを使用します。これは(簡略化された形式で)次のとおりです。
from rq import Connection, Worker
queues_to_listen_on = get_queues_to_listen_on()
with Connection(connection = get_worker_connection()):
w = Worker(queues_to_listen_on)
w.work()
特に労働者の閉鎖に関心があります。私たちが抱えている主な懸念は、シャットダウンする前に現在の作業を終了できるように、ワーカーを正常にシャットダウンする方法です。適切なオブジェクトのrequest_stop(...)
シグナルハンドラーは必要なことを実行しているように見えますが、ターミナルで実行されているワーカープロセスWorker
を押す以外に、(少なくとも私の知る限りでは)それを発行する方法はないようです。CTRL+C
私が見ているように、2つの考えられる解決策があります(間違いなくもっとあるかもしれません)-好みの順に:
- プログラムで、
rq
ライブラリを使用して、シグナルをに送信し、request_stop
正常なシャットダウンをトリガーします。 - どういうわけか正しいプロセスのpidを取得し(主力プロセスかワーカーリスナープロセスかわからない)、他の方法を使用して、適切なシグナルをそのプロセスに送信します。これを行うにはいくつかの方法がありますが、おそらくより多くの作業が必要であり、私が除外したい問題に他の変数を導入します(たとえば、
Fabric
リモートコマンドなどをそれらの行に沿って実行するために使用します)。
この問題を解決するためのより良い方法、または同じ目標を達成する別の代替方法がある場合は、あなたの提案をいただければ幸いです。