我开始在Python / Django Web项目中运行celery,托管在具有8个内核或CPU的单个VM上。我现在需要改进配置 - 我已经犯了新手错误。
我使用supervisor
处理芹菜工人并打败。在/etc/supervisor/conf.d/
中,我有两个与工作人员相关的配置文件 - celery1.conf
和celery1.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。需要指导纠正这些错误。
比较屏幕截图:
VS
答案 0 :(得分:1)
它在权威上声明每台机器运行1名工人
实际上,建议("我建议")只为每个机器运行一个这个给定用例的工作。
您可能有充分的理由不这样做(例如,为不同的队列设置不同的工作人员......),芹菜文档说明每个工作人员/每个工作人员(并发)工作的人数最多取决于您任务,用法,机器和诸如此类的东西。
主管conf中的wrt /numprocs
和芹菜中的concurrency
,这些都完全不相关(好吧,差不多......)。芹菜"工人"实际上是产生concurrency
个孩子的一个主要过程(有效处理你的任务的孩子)。主管numprocs
告诉主管应该启动多少个流程(这里是:芹菜工人)。因此,如果您有一个numprocs
= 2的芹菜conf和另一个numproc
= 3的芹菜conf,这意味着您将启动总共5个父工作进程 - 每个进程都会产生n
子项,默认情况下,n
是您服务器的cpus计数。这意味着您总共运行了5 +(5 * 8)= 45个工作子进程。
你确实需要许多工人是一个只有你能回答的问题;)