Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Celery 芹菜:基于工作内存动态分配并发_Celery - Fatal编程技术网

Celery 芹菜:基于工作内存动态分配并发

Celery 芹菜:基于工作内存动态分配并发,celery,Celery,我的芹菜用例:启动芹菜工作者集群并向该集群发送许多任务,然后在所有任务完成后终止集群(通常约2小时) 我目前已经将其设置为使用默认并发,这对于我的用例来说不是最佳的。我认为可以指定一个--并发性,它指定一个工作进程将并行运行的任务数。这对于我的用例也不理想,因为,例如: 集群A可能有非常占用内存的任务,而且--concurrency=1有意义,但是 集群B可能内存不足,--concurrency=50将优化我的工作人员 因为我经常为不同类型的任务使用这些集群,所以我不希望必须事先手动分析任务

我的芹菜用例:启动芹菜工作者集群并向该集群发送许多任务,然后在所有任务完成后终止集群(通常约2小时)

我目前已经将其设置为使用默认并发,这对于我的用例来说不是最佳的。我认为可以指定一个
--并发性
,它指定一个工作进程将并行运行的任务数。这对于我的用例也不理想,因为,例如:

  • 集群A可能有非常占用内存的任务,而且
    --concurrency=1
    有意义,但是
  • 集群B可能内存不足,
    --concurrency=50
    将优化我的工作人员
因为我经常为不同类型的任务使用这些集群,所以我不希望必须事先手动分析任务,每次都手动设置并发性

我想要的行为是有记忆阈值。例如,我可以在配置文件中设置:

min_worker_memory = .6
max_worker_memory = .8
这意味着工作进程将并发性增加1,直到工作进程超过使用80%以上内存的阈值。然后,它将并发性减少1。它将在集群的生命周期内保持该并发性,除非工作内存低于60%,此时它将再次将并发性增加1


我是否可以利用现有的芹菜设置来实现这一点,或者我必须自己实现这一逻辑?似乎有点接近我想要的,但这会导致进程被终止,而这不是我想要的。

不幸的是,芹菜没有提供一个可以根据内存使用情况进行上下扩展的功能。然而,作为一个设计良好的软件,它为您提供了一个接口,您可以根据自己的喜好实现该接口。我相信在psutil软件包的帮助下,您可以轻松创建自己的autoscaler

我根据您链接的内容做了进一步的研究,发现github的要点几乎完全符合我的要求: