gpt4 book ai didi

python - Celery/Redis 任务过期

转载 作者:IT王子 更新时间:2023-10-29 06:13:08 29 4
gpt4 key购买 nike

我正在使用 Celery,主管运行工作人员,Redis 作为代理,我遇到了一个 Celery 工作人员明显卡住的问题,使其无法处理更多任务并导致其在 Redis 中的任务队列被填满直到导致一些内存问题。我在调用任务时尝试设置 expires 选项,认为这将利用 Redis 对 key 过期的支持:

some_task.apply_async(args=('foo',), expires=60)

但这没有用,当我检查 Redis CLI 中的相应列表时,它一直在扩展——也许不足为奇,因为它听起来像 list expiry is not built-in functionality在 Redis 中。 Celery docs说到期时间对应于“发布”任务后的时间,但我找不到任何提及“发布”的实际含义。我曾假设它指的是将任务添加到 Redis 列表中,所以要么这个假设是错误的,要么发生了我不明白的事情(或两者都有)。

我对任务到期时间的理解有误吗?如果是这样,是否有任何方法可以使消息在 Redis 中过期?

最佳答案

上下文比问题更令人费解。您可以使用 redis-cli 并检查了 redis key 。在 redis-cli 中,您可以键入 ttl sexykey 并且如果 Celery 将 key 设置为过期,您应该已经看到剩余的秒数,从而回答您对此的特定不确定性事情。

首先,让我们清楚有一个消息代理。其次,有一个结果后端。 Celery 只有很少的 message brokers 但有很多 result backends。经纪人名单是here .支持的后端列表位于第 10 页(截至 2018 年 3 月 24 日)传输和后端部分 here .这是我认为会填满的 result backend,因为这也是我所看到的。

Celery 可以将同一个 Redis 实例同时用作消息代理结果后端。 Celery 将执行任务的结果存储为 Redis 键,无论任务是否成功,并且此 Redis 键的默认有效期为 1 天(86400 秒)。因此,如果您有许多由 Celery 执行的函数调用,那么您的 Redis 内存缓存将被填满,因为 86400 秒的 key 过期时间将赶不上任务结果的传入记录。

要将 key 过期时间缩短到 60 秒,这里是 python 代码段:

app = Celery('justdoit',
broker='redis://172.17.0.2',
backend='redis://172.17.0.2')

app.conf.result_expires = 60

PS:几个小时前我刚刚学习 Celery,我立即意识到(在它发生之前)与描述的 Redis 填满场景完全相同。我已经使用 Redis 一年了,所以我知道它的一些特性。

关于python - Celery/Redis 任务过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49000091/

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