如何使用Celery重新启动(取消激活)已撤销的任务?

时间:2014-12-19 11:38:46

标签: python celery

有什么方法可以"取消撤销"使用Celery的任务?我需要能够手动重新启动以前撤销的任务。如果不能直接实现,有没有办法复制撤销的任务并启动一个具有完全相同参数的新任务?

这是一个小例子:

app = Celery('tests', broker='redis://localhost:6379/0')
app.conf.update(
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0',
    CELERY_TASK_SERIALIZER='json',
    CELERY_ACCEPT_CONTENT=['json'],
    CELERY_RESULT_SERIALIZER='json',
)

@app.task
def add(x, y):
    return x + y

task = add.delay(1, 2)
task.revoke(terminate=True)

# ...
# Something happens here and now I need to actually launch the revoked task.
# I'd need something like...
task.restart()  # How can I do this?

1 个答案:

答案 0 :(得分:0)

delay会返回AsyncResult个实例,该实例不知道您的任务是如何启动的。

您可以尝试保留任务的签名,然后重新启动它。

sig = add.s(1, 2)
task = sig.apply_async()
task.revoke(terminate=True)

# ...

task  = sig.apply_async()  # Will relaunch a task with the same parameters.