没有结果的Celery任务写入结果后端

Ser*_*hko 4 celery django-celery

我有一些应该返回结果的任务,而有些任务则没有.我想强制不应返回结果的任务不在结果后端写入任何内容(例如None).我怎样才能在芹菜中实现这一目标?

例如,这是我的任务:

@app.task
def taskWithResult():
    # ...code...
    return res

@app.task
def taskWithNoResult():
    # ...code without return...
Run Code Online (Sandbox Code Playgroud)

而且我也有一些特殊队列用于其他一些也没有返回任何结果的任务,我可以将该队列标记为必须不在结果后端写入的任务吗?

小智 9

从celery文档中,您可以将ignore result标志设置为True. http://docs.celeryproject.org/en/latest/reference/celery.app.task.html?highlight=default_retry_delay#celery.app.task.Task.ignore_result

例如:

@app.task(ignore_result=True)
def taskWithNoResult():
    # ...code without return..
Run Code Online (Sandbox Code Playgroud)


ana*_*thi 7

全局配置

app.conf.task_ignore_result = True
Run Code Online (Sandbox Code Playgroud)

本地关闭返回任务结果:

@app.task(ignore_result=True)
def add(...):
Run Code Online (Sandbox Code Playgroud)

如果您只想将任务执行失败的异常结果返回并持久化以供后续排查分析,那么可以在使用数据库作为结果后端时应用以下配置:

仅将任务错误存储在结果后端中。

app.conf.task_ignore_result = True
app.conf.task_store_errors_even_if_ignored = True
Run Code Online (Sandbox Code Playgroud)

  • 这可以应用于特定任务,例如: @task(name="test") def test(ignore_result=True, store_errors_even_if_ignored=True): (3认同)