Celery/Redis task expiration
我使用的是芹菜,主管运行工人,而Redis作为经纪人,我遇到了一个问题,芹菜工人显然冻结了,使其无法处理更多任务,并导致Redis中的任务队列填满了导致一些内存问题的观点。我在调用任务时尝试设置
1 | some_task.apply_async(args=('foo',), expires=60) |
但这是行不通的,当我在Redis CLI中检查相应列表时,它一直在扩展-也许并不奇怪,因为听起来好像列表过期不是Redis的内置功能。 Celery文档说过期时间与"发布"任务后的时间相对应,但是我找不到"发布"的实际含义。我以为它是指将任务添加到Redis列表中,因此,要么推定是错误的,要么是发生了我不理解的其他事情(或两者都发生了)。
任务到期时间我错了吗?如果是这样,是否有任何方法可以使消息在Redis中过期?
上下文比问题更令人困惑。您可以使用redis-cli并检查了redis密钥。在redis-cli中,您可以键入
首先,让我们清楚地有一个
Celery可以将同一Redis实例用作
为了将密钥有效期缩短到60秒,这是python代码段:
1 2 3 4 5 | app = Celery('justdoit', broker='redis://172.17.0.2', backend='redis://172.17.0.2') app.conf.result_expires = 60 |
PS:我几个小时前才刚刚学习Celery,我立即意识到(在发生之前)这种与Redis完全相同的填充场景。我已经使用Redis一年了,所以我知道它的一些特性。