3

假设一个任务足以让机器保持几分钟的忙碌状态。

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

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

4

1 回答 1

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。......如果你有一个任务,......并且你将每个请求路由到同一个进程,那么它将在请求之间保持状态。”

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

于 2013-11-01T05:49:23.403 回答