芹菜:工人是否停止在最大容量?

时间:2014-09-12 00:08:27

标签: celery

我在小型服务器上将并发性设置为10.

我提交了20个工作,我预计会有10个工作,但它从未超过5个并发。

为什么会发生这种情况,Celery会根据内存和CPU自动限制自己?

我添加了一个小型服务器512mb ram运行视频转码操作(ffmpeg)

1 个答案:

答案 0 :(得分:2)

您必须检查CELERYD_PREFETCH_MULTIPLIER配置

  

默认值为4

这意味着所有10个线程都将预取4并逐个运行

 # Send 20 tasks
 worker-1: prefetch 4 tasks: 1-4 
 worker-2: prefetch 4 tasks: 5-8
 worker-3: prefetch 4 tasks: 9-12
 worker-4: prefetch 4 tasks: 13-16
 worker-5: prefetch 4 tasks: 17-20
 worker-6: no more tasks to fetch
 worker-7: no more tasks to fetch 
 worker-8: no more tasks to fetch 
 worker-9: no more tasks to fetch
 worker-10: no more tasks to fetch

Preftech可以限制网络使用,如果任务完成得非常快,它可以大大减少经纪人和工作人员之间的沟通,提高绩效。

但是如果任务很慢,它会使工人负荷失衡。

编辑:

对于您的情况(任务~30分钟),请使用prefetch = 1。

同样使用10个芹菜过程和1个线程(concurency = 1)替代1个过程,10个线程(concurency = 10),它可以表现得更好。

此文档中的更多信息: http://celery.readthedocs.org/en/latest/userguide/optimizing.html#prefetch-limits