簡體   English   中英

從已完成的 celery 任務中清除 redis

[英]Clearing out redis from celery tasks that has finished

我正在使用 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 如文檔中所述

“內置定時任務會在這個時間后刪除結果”,所以內置任務默認每天凌晨4點運行,所以如果你不改變配置肯定會被刪除,你可以交叉檢查之后凌晨 4 點,如果您打算將其存儲在數據庫中,則必須為此運行 celery beat,

所以回顧一下,它會被刪除,是的,但只有當 celery 后端清理器將運行時,您正在配置的那個決定了需要存儲的結果的生命周期,但這並不意味着 redis 將為您刪除它,即到期團隊正在讓 celery 清潔器查看並確定,是的,現在可以刪除此結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM