芹菜单任务持久化数据



假设一个任务足以让机器在几分钟内保持非常繁忙。

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

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

可以。文档(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. ...如果你有任务,…并且您将每个请求路由到相同的进程,那么它将在请求之间保持状态。"

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

相关内容

  • 没有找到相关文章

最新更新