すべて、私は、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
問題は、3 つのジョブを同時に送信すると、実行にかかる合計時間が 1 つのタスクの 3 倍になることです (つまり、合計時間はタスクの数に比例し、これは x4、x5 などにスケーリングされます)。同時実行は利用できないようです。また、新しいジョブを最小限の開始済みジョブとキュー済みジョブでキューに送信することで、基本的な負荷分散を実装しました。これは正常に機能します (ジョブはキュー間で均等に分散されていることが観察されます)。
この設定で同時実行が許可されないのはなぜですか?
不足しているセットアップに関する考慮事項はありますか?
PY3 に移行し、gevent 自体は PY3 ではまだサポートされていないため、rq-gevent-worker パッケージ (以前は同時実行/RQ でうまく機能していた) は使用できなくなったことに注意してください。しかし、これにより、同時実行が可能であるという手がかりが得られます。