0

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

supervisor用来处理芹菜工人和殴打。在/etc/supervisor/conf.d/中,我有两个与工人相关的 conf 文件 -celery1.confcelery1.conf. 我是不是该...

1)删除其中之一?两者都产生不同的工人。即以前的 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"。发生什么了?主管numprocs优先concurrency于 celeryd,还是什么?我应该设置numprocs=0吗?


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

对比截图:

根据supervisorctl,5个芹菜工人

对比

根据 newrelic,有 45 个正在运行的 celery 进程

4

1 回答 1

3

这里权威地规定每台机器运行 1 个工人

实际上,对于这个给定的用例,建议(“我建议”)每台机器只运行一个工作人员。

您可能有很好的理由不这样做(例如,为不同的队列设置不同的工作人员......),并且 celery 文档指出,每个工作人员(并发)有多少工作人员/多少进程最有效,实际上取决于您的任务、使用情况,机器等等。

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

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

于 2016-12-23T15:56:25.043 回答