更正配置错误的芹菜(运行 supervisord)

Correcting mis-configured celery (running with supervisord)

我开始 运行ning celery 用于 Python/Django Web 项目中的任务,该项目托管在具有 8 个内核或 CPU 的单个 VM 上。我现在需要改进配置-我犯了菜鸟错误。

我用supervisor来处理celery worker和beat。在 /etc/supervisor/conf.d/ 中,我有两个与工作人员相关的配置文件 - celery1.confcelery1.conf。我应该...

1) 删除其中一个? 两者都产生不同的工人。 IE。前一个 conf 文件有 command=python manage.py celery worker -l info -n celeryworker1。后者有command=python manage.py celery worker -l info -n celeryworker2。每台机器 到 运行 1 个工人。

2) 在 conf 中修改 numprocs 目前在 celery1.conf,我已经定义了 numprocs=2。在 celery2.conf 中,我定义了 numprocs=3*(稍后参见页脚)。同时,在/etc/default/celeryd中,我有CELERYD_OPTS="--time-limit=300 --concurrency=8"。发生什么了? supervisor 的 numprocs 优先于 celeryd 中的 concurrency,或者什么?我应该设置 numprocs=0 吗?


*两个文件的总 numprocs = 2+3 = 5。这检查出来了。 sudo supervisorctl 显示 5 个 celery 工作进程。但是在 newrelic 中,我看到 45 个进程 运行ning 用于 celeryd。有没有搞错?!即使 supervisor 创建的每个 proc 实际上产生了 8 个 proc(通过 celeryd),总计 numprocs x concurrency = 5 x 8 = 40。这比 newrelic 显示的 45 少 5。需要指导来纠正这些错误。

比较截图:

it's authoritatively stated here to run 1 worker per machine

实际上,建议 ("I would suggest") 每台机器只 运行 一个工人 对于这个给定的用例 .

您可能有充分的理由不这样做(例如,为不同的队列设置不同的工作人员...),并且 celery 文档指出每个工作人员(并发)的最佳工作量实际上取决于多少工作人员/多少进程关于您的任务、使用情况、机器和诸如此类的东西。

wrt/ supervisor conf 中的 numprocs 和 celery 中的 concurrency,这些是完全不相关的(嗯,几乎......)事情。芹菜 "worker" 实际上是产生 concurrency 个子进程的一个主要进程(这些子进程有效地处理您的任务)。 Supervisor 的 numprocs 告诉 supervisor 它应该启动多少个进程(这里是 celery workers)。因此,如果您有一个 numprocs = 2 的 celery conf 和另一个 numproc = 3 的 celery conf,这意味着您总共启动了 5 个 parents 个工作进程 - 每个其中有 n 个子子,其中 - 默认情况下 - n 是您服务器的 cpus 计数。这意味着您总共有 5 + (5*8) = 45 个工作子进程 运行ning。

你是否真的需要那么多工人是一个只有你能回答的问题;)