【发布时间】:2020-08-03 19:22:03
【问题描述】:
我的 celery 用例:启动一个 celery worker 集群并向该集群发送许多任务,然后在所有任务完成后(通常约 2 小时)终止集群。
我目前已将其设置为使用默认并发,这对我的用例来说不是最佳的。我看到可以指定一个--concurrencyargument in celery,它指定一个工作人员将并行运行的任务数。这也不适合我的用例,因为例如:
- 集群 A 可能有非常占用内存的任务,
--concurrency=1是有道理的,但是 - 集群 B 可能内存较少,
--concurrency=50会优化我的工作人员。
因为我经常将这些集群用于非常不同类型的任务,所以我不想事先手动分析任务并每次手动设置并发。
我想要的行为是有记忆阈值。例如,我可以在配置文件中设置:
min_worker_memory = .6
max_worker_memory = .8
意味着worker将concurrency增加1,直到超过使用超过80%内存的阈值。然后,它将并发减 1。它将在集群的整个生命周期内保持该并发,除非工作内存低于 60%,此时它将再次将并发加 1。
我可以利用任何现有的 celery 设置来执行此操作,还是我必须自己实现此逻辑? max memory per child 似乎有点接近我想要的,但这会导致进程被杀死,这不是我想要的。
【问题讨论】:
标签: celery