Celery 芹菜:基于工作内存动态分配并发
我的芹菜用例:启动芹菜工作者集群并向该集群发送许多任务,然后在所有任务完成后终止集群(通常约2小时) 我目前已经将其设置为使用默认并发,这对于我的用例来说不是最佳的。我认为可以指定一个Celery 芹菜:基于工作内存动态分配并发,celery,Celery,我的芹菜用例:启动芹菜工作者集群并向该集群发送许多任务,然后在所有任务完成后终止集群(通常约2小时) 我目前已经将其设置为使用默认并发,这对于我的用例来说不是最佳的。我认为可以指定一个--并发性,它指定一个工作进程将并行运行的任务数。这对于我的用例也不理想,因为,例如: 集群A可能有非常占用内存的任务,而且--concurrency=1有意义,但是 集群B可能内存不足,--concurrency=50将优化我的工作人员 因为我经常为不同类型的任务使用这些集群,所以我不希望必须事先手动分析任务
--并发性,它指定一个工作进程将并行运行的任务数。这对于我的用例也不理想,因为,例如:
- 集群A可能有非常占用内存的任务,而且
--concurrency=1
有意义,但是
- 集群B可能内存不足,
--concurrency=50
将优化我的工作人员
因为我经常为不同类型的任务使用这些集群,所以我不希望必须事先手动分析任务,每次都手动设置并发性
我想要的行为是有记忆阈值。例如,我可以在配置文件中设置:
min_worker_memory = .6
max_worker_memory = .8
这意味着工作进程将并发性增加1,直到工作进程超过使用80%以上内存的阈值。然后,它将并发性减少1。它将在集群的生命周期内保持该并发性,除非工作内存低于60%,此时它将再次将并发性增加1
我是否可以利用现有的芹菜设置来实现这一点,或者我必须自己实现这一逻辑?似乎有点接近我想要的,但这会导致进程被终止,而这不是我想要的。不幸的是,芹菜没有提供一个可以根据内存使用情况进行上下扩展的功能。然而,作为一个设计良好的软件,它为您提供了一个接口,您可以根据自己的喜好实现该接口。我相信在psutil软件包的帮助下,您可以轻松创建自己的autoscaler 我根据您链接的内容做了进一步的研究,发现github的要点几乎完全符合我的要求: