我在小型服务器上将并发性设置为10.
我提交了20个工作,我预计会有10个工作,但它从未超过5个并发。
为什么会发生这种情况,Celery会根据内存和CPU自动限制自己?
我添加了一个小型服务器512mb ram运行视频转码操作(ffmpeg)
答案 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