【问题标题】:Celery single task persistent dataCelery 单任务持久化数据
【发布时间】:2013-06-11 01:04:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: celery celery-task celeryd


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 2017-02-17
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多