在init上加载大型数据结构以供芹菜任务稍后重复使用(Django/芹菜)
我的一项芹菜任务需要访问非常大的数据结构。这种型号的内存一旦加载就会很耗,而且需要很长时间才能完成 我试图避免多次加载这个,每次我调用“score\u model”。最好,我希望在初始化时将此数据加载到内存中一次,以便仅在需要时可用于此任务 (通常pickle工作得很好,但是这个模型不容易序列化,所以我不能在缓存中设置它。它需要一个复杂的自定义后端,我不相信它会节省大量时间。) 芹菜文档建议我创建一个基类。这个答案也很有帮助 答案提示在初始化时让对象可用,以便以后使用,并且可以很好地集中常见功能,在工作人员之间使用时保持会话打开以下代码有效:在init上加载大型数据结构以供芹菜任务稍后重复使用(Django/芹菜),django,celery,Django,Celery,我的一项芹菜任务需要访问非常大的数据结构。这种型号的内存一旦加载就会很耗,而且需要很长时间才能完成 我试图避免多次加载这个,每次我调用“score\u model”。最好,我希望在初始化时将此数据加载到内存中一次,以便仅在需要时可用于此任务 (通常pickle工作得很好,但是这个模型不容易序列化,所以我不能在缓存中设置它。它需要一个复杂的自定义后端,我不相信它会节省大量时间。) 芹菜文档建议我创建一个基类。这个答案也很有帮助 答案提示在初始化时让对象可用,以便以后使用,并且可以很好地集中常见功能
tasks.py
from celery import Task
from celery.decorators import task
class startup(Task):
abstract = True
def __init__(self):
print "Loading..."
self.score_model= load_and_bin('/opt/model.tar')
@task(base=startup, bind=True, name="scoring")
def scoring(self, pk):
data = entries.objects.filter(geo_pk=pk)
newscores = score_model(data)
…然而,这会在初始化时多次将我的模型加载到内存中-甚至启动芹菜节拍(它不运行此任务)甚至flower。我不止一次地看到那个小印刷品,我不知道为什么。所以我很快就耗尽了资源。通过删除abstract=True注册这个类仍然有效,但是我更快地耗尽了资源
如何运行load_和_bin一次,并在以后使此对象可用?我从芹菜开始:芹菜-应用程序工作者