Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
在init上加载大型数据结构以供芹菜任务稍后重复使用(Django/芹菜)_Django_Celery - Fatal编程技术网

在init上加载大型数据结构以供芹菜任务稍后重复使用(Django/芹菜)

在init上加载大型数据结构以供芹菜任务稍后重复使用(Django/芹菜),django,celery,Django,Celery,我的一项芹菜任务需要访问非常大的数据结构。这种型号的内存一旦加载就会很耗,而且需要很长时间才能完成 我试图避免多次加载这个,每次我调用“score\u model”。最好,我希望在初始化时将此数据加载到内存中一次,以便仅在需要时可用于此任务 (通常pickle工作得很好,但是这个模型不容易序列化,所以我不能在缓存中设置它。它需要一个复杂的自定义后端,我不相信它会节省大量时间。) 芹菜文档建议我创建一个基类。这个答案也很有帮助 答案提示在初始化时让对象可用,以便以后使用,并且可以很好地集中常见功能

我的一项芹菜任务需要访问非常大的数据结构。这种型号的内存一旦加载就会很耗,而且需要很长时间才能完成

我试图避免多次加载这个,每次我调用“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一次,并在以后使此对象可用?我从芹菜开始:
芹菜-应用程序工作者