Python RQを使用して、我々は動的にワーカープロセスを管理しようとしています。私たちは次のようである(簡略化された形で)、カスタムビルドワーカースクリプトを使用します。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()
私たちは、労働者のシャットダウン時に特に興味を持っています。私たちの主な関心事は、シャットダウンする前に現在の作業を終了できるような方法で、ワーカーを正常にシャットダウンする方法です。適切なWorker
オブジェクト上のシグナルハンドラは私たちが必要とするように見えますが、ターミナルで実行されているワーカープロセス上でCTRL+C
を押すこと以外は、少なくとも私が知っている限り、それを放出する方法はないようです。
私はそれを見るように、2つの可能性の高いソリューション(間違いなく、よりがあるかもしれない)がある - 好みの順番で:
- プログラムは
rq
ライブラリを使用して、request_stop
に信号を送信し、これは正常なシャットダウンをトリガ。 - 何らかの方法で正しいプロセスのPIDを取得します(作業中のプロセスかワーカーリスナープロセスかどうかはわかりません)。他の方法を使用して、そのプロセスに適切な信号を送信します。これを行うにはいくつかの方法がありますが、もっと多くの作業が必要になり、問題に他の変数を追加する必要があります(たとえば、
Fabric
を使ってリモートコマンドやその行に沿って実行するなど)。
この問題を解決するには、より良い方法や同じ目標を達成する別の方法がある場合は、私はあなたの提案を感謝します。
PIDが必要な場合は、実際にはw.pidから取得できます – Borys