gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:42:16 27 4
gpt4 key购买 nike

我正在使用 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 时也在运行,然后在一段时间(超过 5 分钟)后检查 Redis 我看到了这个:
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 秒后清除,我在这里遗漏了什么吗?
提前致谢。

最佳答案

@zhong 所以你缺少的是 celery.backend_cleanup,如 docs 中所述
“内置周期任务会在这个时间之后删除结果”,所以内置任务默认在每天凌晨4点运行,所以如果你不更改配置它肯定会被删除,你可以在之后交叉检查凌晨 4 点,如果您打算将其存储在 db 中,则必须为此运行 celery beat,
所以回顾一下它会被删除是的,但只有当 celery 后端清理器将运行时,您正在配置的那个决定了需要存储的结果的生命周期,但这并不意味着 redis 会为您删除它,即到期团队是让 celery 清洁工来查看和确定的,是的,现在可以删除此结果。

关于python - 从已完成的 celery 任务中清除 redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63081704/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com