セロリの労働者の数を制限する方法はありますか?私は小さなサーバーを持っていて、セロリは常に1つのコアプロセッサで10のプロセスを作成します。この数を3プロセスに制限したいと思います。
4 に答える
settings.pyファイルで同時実行性を1に設定し、max_tasks_per_childを1に設定して、3つのタスクを同時に実行してみました。1つのプロセスをユーザーとして生成し、他の2つのプロセスをセロリとして生成します。1つのプロセスを実行し、それが終了するのを待ってから、もう1つのプロセスを実行する必要があります。
djangoセロリを使用しています。
編集{
settings.pyファイルにCELERYD_CONCURRENCY=1を書き込んで、同時実行性を割り当てていました。しかし、「tail -f /var/log/celery/w1.log」を使用してセロリのログファイルを見ると、同時実行性に8の値が割り当てられていることがわかりました。これは、setting.pyが同時実行性を変更しないことを教えてくれました。この問題を修正するために、「/ etc / default/celeryd」ファイルに次の行を追加しました。
# Extra arguments to celeryd
CELERYD_OPTS="--concurrency=1"
これで、キュー内の2番目のタスクは、最初のタスクが終了するまで待機します。
}
celery worker --concurrencyオプションを使用すると、キューを処理する子プロセスの数を指定できます。
これはceleryd-configファイルにあります
CELERYD_NODES=2
その結果、
$ ps -ef | grep "celery" | grep -v "grep"
www-data 1783 1 0 17:50 ? 00:00:46 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery1.xxx-31-39-06-74-75 --logfile=/var/log/celery/1.log --pidfile=/var/run/celery/1.pid
www-data 1791 1783 0 17:50 ? 00:00:01 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery1.xxx-31-39-06-74-75 --logfile=/var/log/celery/1.log --pidfile=/var/run/celery/1.pid
www-data 1802 1 0 17:50 ? 00:00:52 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery2.xxx-31-39-06-74-75 --logfile=/var/log/celery/2.log --pidfile=/var/run/celery/2.pid
www-data 1858 1802 0 17:50 ? 00:00:01 /usr/bin/python /opt/webapps/repo/manage.py celeryd --loglevel=INFO -n celery2.xxx-31-39-06-74-75 --logfile=/var/log/celery/2.log --pidfile=/var/run/celery/2.pid
2つではなく4つのプロセスがありますが、2つのワーカーがあります。各ワーカースレッドには2つのプロセスがあるようです。したがって、おそらくCELERYD_NODESを3に設定すると、3つのワーカーが得られますが、6つのプロセスが得られます。
セロリオプションパラメータで--autoscale=3を試してください。