纠正错误配置的芹菜(与supervisord一起运行)

时间:2016-12-23 15:36:39

标签: python celery django-celery supervisord celeryd

我开始在Python / Django Web项目中运行celery,托管在具有8个内核或CPU的单个VM上。我现在需要改进配置 - 我已经犯了新手错误。

我使用supervisor处理芹菜工人并打败。在/etc/supervisor/conf.d/中,我有两个与工作人员相关的配置文件 - 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。它在权威上stated here每台机器运行1名工作人员。

2)在conf中修改numprocs目前在celery1.conf,我已定义numprocs=2。在celery2.conf中,我已定义numprocs=3 *(稍后请参见页脚)。同时,在/etc/default/celeryd,我有CELERYD_OPTS="--time-limit=300 --concurrency=8"。那是怎么回事?主管的numprocs优先于芹菜中的concurrency,或者是什么?我应该设置numprocs=0吗?

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

比较屏幕截图:

5 celery workers as per supervisorctl

VS

45 running celery processes as per newrelic

1 个答案:

答案 0 :(得分:1)

  

它在权威上声明每台机器运行1名工人

实际上,建议("我建议")只为每个机器运行一个这个给定用例的工作

您可能有充分的理由不这样做(例如,为不同的队列设置不同的工作人员......),芹菜文档说明每个工作人员/每个工作人员(并发)工作的人数最多取决于您任务,用法,机器和诸如此类的东西。

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

你确实需要许多工人是一个只有你能回答的问题;)