【问题标题】:Celery tasks without result write to result backend没有结果写入结果后端的 Celery 任务
【发布时间】:2017-04-10 01:50:18
【问题描述】:

我有一些任务应该返回结果,而一些任务则没有。 我想强制不应该返回结果的任务不要在结果后端写任何东西(例如无)。我怎样才能在 Celery 中实现这一点?

例如这是我的任务:

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

@app.task
def taskWithNoResult():
    # ...code without return...

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

【问题讨论】:

    标签: celery django-celery


    【解决方案1】:

    从 celery 文档中,您可以将忽略结果标志设置为 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..
    

    【讨论】:

    • 您可以使用 apply_async 来选择任务队列。 link
    【解决方案2】:

    全局配置

    app.conf.task_ignore_result = True
    

    本地关闭返回任务结果:

    @app.task(ignore_result=True)
    def add(...):
    

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

    只在结果后端存储任务错误。

    app.conf.task_ignore_result = True
    app.conf.task_store_errors_even_if_ignored = True
    

    【讨论】:

    • 可以将其应用于特定任务,例如:@task(name="test") def test(ignore_result=True, store_errors_even_if_ignored=True):
    猜你喜欢
    • 2012-01-15
    • 1970-01-01
    • 2022-11-25
    • 2015-05-16
    • 2021-02-25
    • 2019-07-20
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多