【问题标题】:Do I need to use celery.result.forget when using a database backend?使用数据库后端时是否需要使用 celery.result.forget?
【发布时间】:2018-12-21 20:59:34
【问题描述】:

我遇到了以下警告:

后端使用资源来存储和传输结果。为确保资源被释放,您最终必须在调用任务后返回的每个 AsyncResult 实例上调用 get() 或 forget()。

我目前正在使用django-db backend,我想知道不注意此警告的后果。如果我不forgetAsyncResult,哪些资源不会被“释放”?我不担心从我的数据库中清理任务结果。我主要关心的是工人的可用性受到影响。

【问题讨论】:

    标签: django celery


    【解决方案1】:

    我实际上从未见过那个警告。只要你运行 celery beat,你会没事的。 Celery 有一个默认的定期任务,它会为您设置并计划在凌晨 4:00 运行。如果您使用基于数据库的后端(如 postgres 或 mysql),该任务会删除数据库中所有过期的结果。

    【讨论】:

      【解决方案2】:

      Celery 似乎对此有一个设置,即result_expires。文档说明了一切:

      result_expires

      默认:1 天后过期。

      存储的任务墓碑将被删除的时间(以秒为单位,或 timedelta 对象)。

      但正如@2ps 所提到的,celery-beat 必须运行用于数据库后端,据记录表明“任务每天凌晨 4 点运行”。对于其他类型的后端,例如AMQP,似乎没有必要记录:

      注意

      目前这只适用于 AMQP、数据库、缓存、Couchbase 和 Redis 后端。

      使用数据库后端时,必须运行 celery beat 才能使结果过期。

      【讨论】:

        猜你喜欢
        • 2012-03-01
        • 1970-01-01
        • 2012-04-22
        • 1970-01-01
        • 2019-10-24
        • 1970-01-01
        • 1970-01-01
        • 2019-12-22
        • 1970-01-01
        相关资源
        最近更新 更多