芹菜能等到有足够的资源(RAM)可用吗



我有一个程序,它对大图像进行大量计算,显然它只能处理系统RAM允许的那么多请求。

我使用Celery+Redis对这些长任务进行排队,并想知道是否有任何方法可以指示Celery在开始新任务之前先检查RAM可用性(但仍要让它们排队(?某种类型的锁会在RAM被完成的任务释放后打开?

我很乐意接受任何建议或方向。

这可以使用芹菜检查来解决

以检索集群状态和总体内存占用。

结合重试或确认延迟

这个想法

当任务启动时,可以查询集群(或外部服务(以检索所有内存占用信息:

# example
from celery import Celery
app = Celery(...)
app.control.inspect().active()

它为每个可用的工作人员返回大量信息。

之后,您应该应用某种基于内存的规则,然后继续计算或决定释放处理:

# example
@celery.task(bind=True)
def task(self, *args, **kwargs):
if is_there_enought_memory():
do_stuff()
else:
time.sleep(...)
self.retry(...)

当不满足最低要求时,任务会等待一定的时间并重新安排任务本身。

相关内容

  • 没有找到相关文章

最新更新