有什么办法可以限制芹菜的工人数量吗?我有小型服务器,芹菜总是在 1 个核心处理器上创建 10 个进程。我想将此数字限制为 3 个进程。
4 回答
我尝试在我的 settings.py 文件中将并发设置为 1,将 max_tasks_per_child 设置为 1,并同时运行 3 个任务。它只是将 1 个进程作为用户生成,另外 2 个进程作为 celery。它应该只运行 1 个进程,然后等待它完成,然后再运行另一个进程。
我正在使用 django 芹菜。
编辑{
我通过在 settings.py 文件中写入 CELERYD_CONCURRENCY = 1 来分配并发性。但是当我使用“tail -f /var/log/celery/w1.log”查看 celery 日志文件时,我看到分配给并发的值为 8。这告诉我 setting.py 不会改变并发性。为了解决这个问题,我在“/etc/default/celeryd”文件中添加了以下几行。
# Extra arguments to celeryd
CELERYD_OPTS="--concurrency=1"
现在队列中的第二个任务等待第一个任务完成。
}
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
有四个进程,不是两个,而是两个工人。看起来每个工作线程都有两个进程。因此,大概如果您将 CELERYD_NODES 设置为 3,您将获得 3 个工人但 6 个进程。
您应该在 celery 选项参数中尝试 --autoscale=3 。