nff*_*lva 7 task celery django-celery
我一直在阅读django-celery试图找到一种清理celery_taskmeta的原生方式,所以这个表在生产环境中不会长得太多.
什么也都找不到.我应该做一个处理这个的命令吗?
小智 6
我没有使用django-celery,所以我的答案可能不完整.
在后端有一个方法允许你强制清理celery_taskmeta:在celery.backends.base.BaseBackend中,你可以找到方法清理()
所以,当我需要强制清理时,我有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()
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
请注意,在任务本身中调用清理工作似乎很安静.
第三种选择是使用清理后端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()
Run Code Online (Sandbox Code Playgroud)
设置芹菜节拍,就像crontab工作一样,有很好的记录
我有一个运行 Django 命令的 cronjob,该命令执行以下 SQL 语句:
"truncate table celery_taskmeta"
Run Code Online (Sandbox Code Playgroud)
0.47 毫秒内删除了 50.000 条记录。
| 归档时间: |
|
| 查看次数: |
3151 次 |
| 最近记录: |