Jos*_*eph 48 python concurrency celery
在我的/etc/defaults/celeryd配置文件中,我设置了:
CELERYD_NODES="agent1 agent2 agent3 agent4 agent5 agent6 agent7 agent8"
CELERYD_OPTS="--autoscale=10,3 --concurrency=5"
Run Code Online (Sandbox Code Playgroud)
据我所知,该守护进程会产生8名芹菜工人,但我完全不知道该做什么autoscale,concurrency一起做什么.我认为并发是指定工作者可以使用的最大线程数的一种方式,并且如果需要,自动缩放是工作者扩展和缩小子工作者的一种方式.
这些任务有效载荷很大(大约20-50kB),有2-3万个这样的任务,但每个任务都在不到一秒的时间内运行.我看到内存使用率飙升,因为代理将任务分配给每个工作人员,因此多次复制有效负载.
我认为问题在于配置,并且工作者+并发+自动缩放的组合过度,我希望更好地理解这三个选项的作用.
scy*_*ale 39
让我们区分工人和工人的过程.您生成一个芹菜工人,这则产卵(取决于事情,比如一些进程--concurrency和--autoscale,默认为产卵在机器上尽可能多的进程为核心).除非您想要进行路由,否则在特定计算机上运行多个worker是没有意义的.
我建议每台机器只运行1个工作程序,并使用默认的进程数.这将通过消除工作人员之间的数据重复来减少内存使用.
如果仍有内存问题,请将数据保存到商店,并仅将ID传递给工作人员.
WMR*_*dan 15
当使用--autoscale进程数时,使用最大/最小值动态设置,这使工作线程能够根据负载进行扩展;当使用--concurrency进程数时,使用固定数量静态设置。因此,将两者一起使用是没有意义的。
Celery--autoscale负责根据负载动态增长和缩小池。这反过来会在有工作要做时添加更多进程,并在工作负载较低时删除进程。例如,--autoscale=10,3最多可以有 10 个进程,最少有 3 个进程。
至于--concurrencycelery 默认情况下使用多处理来执行任务的并发执行。可以使用参数更改工作进程/线程的数量,--concurrency如果未设置,则默认为可用 CPU 的数量。例如,--concurrency=5使用 5 个进程意味着 5 个任务可以同时运行。