我一直在阅读 django-celery 试图找到一种清理 celery_taskmeta 的本地方法,因此该表在生产环境中不会增长太多。
什么也找不到。我应该做一个命令来处理这个吗?
我一直在阅读 django-celery 试图找到一种清理 celery_taskmeta 的本地方法,因此该表在生产环境中不会增长太多。
什么也找不到。我应该做一个命令来处理这个吗?
我没有使用 django-celery,所以我的答案可能不完整。
后端有一个方法可以让你强制清理 celery_taskmeta :在 celery.backends.base.BaseBackend 中,你可以找到方法 cleanup()
所以,当我需要强制清理时,我有 3 种方法:
# 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()
请注意,在任务本身中调用清理似乎非常安静。
第三种选择是使用清理后端 celery_taskmeta 的 celerybeat 任务。这是我可能选择的一个。
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 作业一样有据可查
我有一个运行执行此 SQL 语句的 Django 命令的 cronjob:
"truncate table celery_taskmeta"
在 0.47 毫秒内删除了 50.000 条记录。