5

すべて、私は、RQ ワーカーが Supervisord を使用して同時に実行するように「強制」しようとしています。rq-dashboard には 3 つのワーカー、3 つの PID、および 3 つのキュー (ワーカー/PID ごとに 1 つ) が表示されているため、私のセットアップ Supervisord セットアップは正常に機能しているようです。スーパーバイザーのセットアップは次のとおりです (ワーカー 1 のセットアップのみを示し、この下にさらに 2 つのワーカーが定義されています)。

[program:rqworker1]
command = rqworker 1 
process_name = rqworker1-%(process_num)s
numprocs = 1 
user = username 
autostart = True
stdout_logfile=/tmp/rqworker1.log
stdout_logfile_maxbytes=50MB

Supervisord の下で実行されている RQ ワーカー

問題は、3 つのジョブを同時に送信すると、実行にかかる合計時間が 1 つのタスクの 3 倍になることです (つまり、合計時間はタスクの数に比例し、これは x4、x5 などにスケーリングされます)。同時実行は利用できないようです。また、新しいジョブを最小限の開始済みジョブとキュー済みジョブでキューに送信することで、基本的な負荷分散を実装しました。これは正常に機能します (ジョブはキュー間で均等に分散されていることが観察されます)。

この設定で同時実行が許可されないのはなぜですか?

不足しているセットアップに関する考慮事項はありますか?

PY3 に移行し、gevent 自体は PY3 ではまだサポートされていないため、rq-gevent-worker パッケージ (以前は同時実行/RQ でうまく機能していた) は使用できなくなったことに注意してください。しかし、これにより、同時実行が可能であるという手がかりが得られます。

4

1 に答える 1

4

上記のコメントを回答に変更しています...

を使用supervisordして複数のrqworkerプロセスを並行して実行することは、 で意図されたパターンpython-rqあるため、「強制」していることを心配しないでください。あなたは実際に正しい考えを持っています。

一方、独自のロード バランシング アルゴリズムを作成することはアンチパターンpython-rqです。

3 つのワーカー間で作業を分割する場合、それらはすべて同じキューをリッスンする必要があります。スーパーバイザー構成ブロックを 2 つ削除してみて、残った 1 つのブロックを に変更numprocs3ます。3 つのジョブをそのキューにすばやく送信すると、3 つのワーカーが同時に実行されていることがわかります。

于 2016-01-05T17:54:02.243 に答える