【问题标题】:Django Celery Beat and Tasks ResultsDjango Celery Beat 和任务结果
【发布时间】:2021-02-25 16:42:47
【问题描述】:

django-celery-beat 是否可以不保存在短时间内执行的任务?默认情况下,所有结果都保存到任务结果表中。

我在 celeryproject 网页上找不到此信息。

或者,应该如何设置 postgres 自动清理以使索引不会占用那么多磁盘空间?

我想要一个简单的解决方案。覆盖 django celery 逻辑不是一种选择。

【问题讨论】:

    标签: django postgresql celery django-celery django-celery-beat


    【解决方案1】:

    rpc 后端和task_ignore_result 是否满足您的需求:

    app = Celery('APP_NAME', backend='rpc://', broker=BROKER_URL)
    # Keep result only if you really need them: task_ignore_result = False
    # In all other cases it is better to have place somewhere in db
    # Note that this means you can’t use AsyncResult to check if the task is ready, or get its return value.
    app.conf.task_ignore_result = True
    

    这里有一些关于后端的文档:https://docs.celeryproject.org/en/latest/userguide/tasks.html#rpc-result-backend-rabbitmq-qpid

    【讨论】:

    • 应该保存到任务结果中的任务呢?我应该把它分成 2 个 celery 应用程序吗?
    • 你好,是的,分成 2 个 celery 应用程序
    • 这不是一个坏主意。谢谢。
    【解决方案2】:

    我找到了解决方案。它比我想象的要简单。 如果你不想将结果保存到数据库中,只需在装饰器中添加:

    @shared_task (ignore_result = True)
    

    【讨论】: