从已完成的celery 任务中清除redis

xuo3flqw  于 2021-06-10  发布在  Redis
关注(0)|答案(1)|浏览(788)

我正在使用celery 任务队列,它使用redis作为消息代理来运行一些后台任务,将结果保存到redis。
我想把redis从已经完成的任务结果中清除出来,因为我不再需要它们了,所以万一有一个大的尖峰我不必担心。
我遇到了 CELERY_RESULT_EXPIRES 表示任务结果将在x秒后自动清除。

考虑以下代码:

from celery import Celery

CONFIG = {
    'BROKER_URL': 'redis://localhost:6379/0',
    'CELERY_RESULT_BACKEND': 'redis://localhost:6379/0',
    'CELERY_RESULT_EXPIRES': 15, # 15 secs
    'BROKER_POOL_LIMIT': 0, # redis connection get closed once task is done..
}

celery = Celery('tasks', config_source=CONFIG)

@celery.task(name='tasks.say_hello')
def say_hello():
    return "Helloooooo i just came out from the background!"

if __name__ == '__main__':
    say_hello.delay().get()

当运行上面的代码 celery beat -A tasks -l info 也运行,然后检查redis一段时间后(超过5分钟),我看到:

127.0.0.1:6379> KEYS *
1) "_kombu.binding.celery"
2) "_kombu.binding.celery.pidbox"
3) "_kombu.binding.celeryev"
4) "celery-task-meta-854543d8-14ad-4bf8-9725-edcf64131bb2"
5) "celery-task-meta-fa3e267e-46d0-4488-a766-d3276b6abdeb"
6) "celery-task-meta-86c2d83c-cadd-41b9-b4ff-426607786299"

已经完成的任务4到6还在那里!结果不是应该在15秒后消失吗,我是不是漏掉了什么?
提前谢谢。

mum43rcc

mum43rcc1#

@所以你缺少的东西是celery 。如文件所述
“一个内置的周期性任务会在这个时间之后删除结果”,所以内置任务默认每天早上4点运行,所以如果你不更改配置,它肯定会被删除,你可以交叉检查,如果你计划在数据库中存储,你必须运行celery 节拍,
所以概括地说,它将被删除是的,但只有当celery 后端清洁将运行,一个你正在配置的决定生命周期的结果,需要存储,但这并不意味着redis将删除你,到期小组是celery 清洁看看,并确定,是的,这个结果现在可以删除。

相关问题