5

我有Celery运行,一切正常。

Celery 默认使用一个数据库表来存储任务结果,称为celery_taskmeta. 这张桌子增长得非常快。我阅读了文档,但没有找到任何关于清理旧条目的提示。

是否有一个由 自动安排的任务celerybeat来清理这个表,还是我必须在这里配置一些东西?

[编辑]

这与结果后端设置有关吗?这有点令人困惑,因为文档说,这没有默认值。但似乎这database是默认设置,它使用default普通Django 数据库配置的配置

4

4 回答 4

2

您可以通过这种方式手动清理此表:

from djcelery.models import TaskMeta, states TaskMeta.objects.filter(status=states.SUCCESS).delete()

于 2013-08-14T15:30:00.090 回答
2

也许文档是在您发布问题后编写的。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守护进程/服务。

于 2015-07-30T21:36:03.707 回答
1

你已经阅读了 Celery 的文档。

Django-celery为您覆盖结果后端。

于 2012-10-26T12:16:33.067 回答
0

如前所述,清理已经自动完成,默认情况下。您只需要使用以下查询来更新表大小:VACUUM FULL celery_taskmeta

于 2019-07-16T17:19:59.480 回答