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