我开始在Python / Django Web项目中运行celery来完成任务,该项目托管在具有8个核心或CPU的单个VM上。我现在需要改进配置-我犯了菜鸟错误。
我用来supervisor
和芹菜打交道。在中/etc/supervisor/conf.d/
,我有两个与工作人员相关的conf文件-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
。并且在这里权威地声明要在每台计算机上运行1个worker。
2)修补程序numprocs
中的conf?目前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个。在纠正这些错误时需要指导。
比较屏幕截图:
与
它在这里被权威地声明为每台机器运行1个工作程序
实际上,建议(“我建议”)在此给定的用例下,每台机器仅运行一名工作人员。
您可能有充分的理由进行其他操作(例如,针对不同的队列使用不同的工作程序...),并且celery文档指出,最有效的工作程序数量/每个工作程序(并发)的多少取决于您的任务,使用情况,机器和其他功能。
WRT /numprocs
在导师的conf和concurrency
芹菜,这是完全不相关的(嗯,差不多......)的东西。芹菜“工人”实际上是产卵concurrency
子(这是有效处理任务的子程序)的一个主要过程。主管numprocs
告诉主管应启动多少个流程(此处为芹菜工人)。因此,如果您有一个numprocs
= 2的celery conf,而另一个numproc
= 3的celery conf ,则意味着您总共启动了5个父级worker进程-每个进程都生成n
子代,其中-默认情况下-n
是服务器的cpus计数。这意味着您总共有5 +(5 * 8)= 45个工作子进程正在运行。
如果您实际上需要很多工人是一个只有您可以回答的问题;)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句