假设一个任务足以让机器在几分钟内保持非常繁忙。
我想获得任务的结果,然后根据结果,让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. ...如果你有任务,…并且您将每个请求路由到相同的进程,那么它将在请求之间保持状态。"
我已经成功了,但我不知道是否有更好的方法。