Celery单任务持久数据

时间:2013-06-11 01:04:29

标签: celery celery-task celeryd

让我们说一个任务就足以让机器保持忙碌几分钟。

我想获得任务的结果,然后根据结果让工作人员再次执行相同的任务。

我无法找到答案的问题是:我可以将数据保存在工作机器的内存中,以便在下一个任务中使用它吗?

1 个答案:

答案 0 :(得分:4)

是的,你可以。文档(http://docs.celeryproject.org/en/latest/userguide/tasks.html#instantiation)有点模糊,我不确定这是不是最好的方法,但你可以这样做:

这是您想要做的,但不起作用:

# This doesn't work
a = 0
@celery.task
def mytask(x):
    a += x
    return a

这是如何使它工作:

from celery import Task, registry
@celery.task
class MyTask(Task):
    def __init__(self):
        self.a = 0

    def run(self, x):
        self.a += x
        return self.a
mytask = registry.tasks[MyTask.name]

根据文件:

  

没有为每个请求实例化任务,但是在任务注册表中将任务注册为全局实例。这意味着每个进程只调用__init__构造函数一次,并且任务类在语义上更接近Actor。 ...如果你有一个任务,......你将每个请求路由到同一个进程,那么它将在请求之间保持状态。“

我已经取得了成功,但我不知道是否有更好的方法。