芹菜在并发,工作和自动缩放之间的区别

时间:2015-08-08 20:35:38

标签: python concurrency celery

在我的/etc/defaults/celeryd配置文件中,我设置了:

CELERYD_NODES="agent1 agent2 agent3 agent4 agent5 agent6 agent7 agent8"
CELERYD_OPTS="--autoscale=10,3 --concurrency=5"

我知道该守护进程会产生8名芹菜工人,但我完全不确定autoscaleconcurrency在一起做什么。我认为并发是一种指定工作者可以使用的最大线程数的方法,并且如果需要,自动缩放是工作者扩展和减少子工作者的一种方式。

这些任务的有效载荷很大(大约20-50kB),并且有2-3万个这样的任务,但每个任务在不到一秒的时间内运行。我看到内存使用率飙升,因为代理将任务分配给每个工作人员,因此多次复制有效负载。

我认为问题在于配置,并且工作者+并发+自动缩放的组合过度,我希望更好地理解这三个选项的作用。

1 个答案:

答案 0 :(得分:32)

让我们区分工人和工人的过程。你产生一个芹菜工作者,然后产生许多进程(取决于--concurrency--autoscale之类的东西,默认是产生与机器上的核心一样多的进程)。除非您想进行路由,否则在特定计算机上运行多个工作程序是没有意义的。

我建议每台机器只运行1个工作程序,并使用默认的进程数。这将通过消除工作人员之间的数据重复来减少内存使用。

如果仍有内存问题,请将数据保存到商店,并仅将ID传递给工作人员。