我有Celery运行,一切正常。
Celery 默认使用一个数据库表来存储任务结果,称为celery_taskmeta
. 这张桌子增长得非常快。我阅读了文档,但没有找到任何关于清理旧条目的提示。
是否有一个由 自动安排的任务celerybeat
来清理这个表,还是我必须在这里配置一些东西?
[编辑]
这与结果后端设置有关吗?这有点令人困惑,因为文档说,这没有默认值。但似乎这database
是默认设置,它使用default
普通Django 数据库配置的配置。
我有Celery运行,一切正常。
Celery 默认使用一个数据库表来存储任务结果,称为celery_taskmeta
. 这张桌子增长得非常快。我阅读了文档,但没有找到任何关于清理旧条目的提示。
是否有一个由 自动安排的任务celerybeat
来清理这个表,还是我必须在这里配置一些东西?
[编辑]
这与结果后端设置有关吗?这有点令人困惑,因为文档说,这没有默认值。但似乎这database
是默认设置,它使用default
普通Django 数据库配置的配置。
您可以通过这种方式手动清理此表:
from djcelery.models import TaskMeta, states
TaskMeta.objects.filter(status=states.SUCCESS).delete()
也许文档是在您发布问题后编写的。http://celery.readthedocs.org/en/latest/configuration.html的页面提供了答案:
内置的定期任务将在 [ CELERY_TASK_RESULT_EXPIRES 配置指令中设置的时间] 之后删除结果...默认为 1 天后过期。
对于典型的 Django 安装,您可以将后端设置为database。(这就是为什么您会看到存储在数据库的celery_taskmeta表中的结果。)此设置的配置指令如下所示:
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend'
我检查了自己的安装,果然,有一个名为celery.backend_cleanup的每日定期任务,它是在我安装celery时自动创建的(或者可能是在我安装django-celery时)。
要运行定期任务,我相信您必须运行celerybeat守护进程/服务。
你已经阅读了 Celery 的文档。
Django-celery为您覆盖结果后端。
如前所述,清理已经自动完成,默认情况下。您只需要使用以下查询来更新表大小:VACUUM FULL celery_taskmeta