【问题标题】:How to read celery results from redis result backend如何从redis结果后端读取芹菜结果
【发布时间】:2021-11-26 17:44:23
【问题描述】:

我们有一个 (django) celery 设置,其中一个 redis db 作为代理,另一个作为结果后端。

当检查结果后端 redis 中的键时,我们看到 485K 类型的字符串键和 7 个无类型的键。密钥的一个示例是:celery-task-meta-26351389-c077-4ba6-8e34-66731f6636b3。我假设26351389-c077-4ba6-8e34-66731f6636b3 是任务ID。预计不会看到更复杂的类型吗?

通过花界面查看结果时,我们看到:

  • 已处理 376K
  • 8K 失败
  • 368K 成功
  • 86次重试

当转到 /tasks?state=FAILURE 的失败视图时,我们只会看到 2 个失败的任务。当点击 UUID 时,我们会进入任务视图,例如 task/fdb7b30f-d9cf-4b60-a1b4-11d6aee241b3,我们会看到详细信息,包括 args、异常和跟踪。

当转到成功视图 /tasks?state=SUCCESS 时,我们看到 10K 条目。但是对于列表中最早的任务,相应的任务视图告诉我们Unknown task '377cc204-cb5e-41bc-9aa8-194679ac9bce'。对于以后的任务,我们会看到一些信息。

最终,结果后端 redis 使用了将近 500MB 内存,但似乎只能访问很少的信息。

有没有办法可以访问所有这些失败任务的详细信息? (可能会调整我们看起来有点损坏的设置)。

【问题讨论】:

    标签: redis celery django-celery redis-py flower


    【解决方案1】:

    据我所知 Flower 将任务信息保存在内存 (RAM) 中,与 celery 后端无关。

    Celery 后端用于通过其自己的 TTL 机制(在您的情况下为简单的 Redis ttl)检索异步任务的结果。

    Flower 刚刚注册到代理的队列并查看所有事件。

    如果您希望 Flower 保留更多任务(也就是增加历史记录大小),我认为您应该在 Flower 的配置中增加 max-tasks。 (默认=10k)。更多详情请关注docs

    【讨论】:

    • 谢谢。出于某种原因,我认为花不知何故从后端读取。这解释了这种行为。但是,芹菜实际上在后端存储了什么?通过 redis-py 检查它时,我只在其中找到了一个巨大的字符串列表。这是预期的吗?
    • 如果您的 celery 任务返回一些值,它将被存储在那里以备将来检索。
    • 请不要忘记接受答案 :)
    猜你喜欢
    • 2016-06-03
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2016-08-29
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多