如何清除celery_taskmeta



我一直在阅读django-芹菜,试图找到一种原生的方式来清理celery_taskmeta,所以这个表在生产环境中不会增长太多。

找不到任何东西。我应该做一个命令来处理这个吗?

我没有使用django-芹菜,所以我的答案可能是不完整的

在后台有一个方法,允许你强制清理celery_taskmeta:在celery_backend .base。在BaseBackend中,您可以找到方法cleanup()

所以,当我需要强制清理时,我有三种方法:

  1. 在生产者端使用AsyncResult
  2. 在消费者端使用任务
  3. <
  4. celerybeat任务/gh>
生产者侧

# Launch a task
my_task = add_a_task() # use the Task.delay() method for example
# my_task is a celery.result.AsyncResult instance
# Retrieve backend and call cleanup
my_task.backend.cleanup()
消费者端

from celery import Task
from .celery_app import my_celery_app
# Class for a task
@my_celery_app.task()
class CopyTask(Task):
    # A Task instance got a backend property
    def run(self,**kwargs):
        """ Running method of the task """
        # Do something
        pass
    def force_cleanup(self):
        """ Force cleanup. """
       self.backend.cleanup()

请注意,在任务本身中调用清理似乎非常糟糕。

with celerybeat task

第三个选项是使用celerybeat任务来清理后端celery_taskmeta。这是我可能会选择的。

celery beat基本上是一个调度器,你可以运行你想要的任务。所以你可以有一个专门的任务,像这样:

from celery import Task
from .celery_app import my_celery_app
# Class for a task
@my_celery_app.task()
class CleanupTask(Task):
    # A Task instance got a backend property
    def run(self,**kwargs):
        """ Running method of the task """
        # Cleanup here
        self.backend.cleanup()

设置芹菜节拍,如crontab作业,有很好的文档

我有一个cronjob运行Django命令,执行以下SQL语句:

"truncate table celery_taskmeta"

在0.47ms内删除了50,000条记录

相关内容

  • 没有找到相关文章

最新更新