django - 如何调整 celery 设置,使 Redis 不使用太多内存? celery 任务 RESULT_EXPIRES?

标签 django redis celery

这里有点像 Celery 菜鸟,但我认为我有一个配置问题,Celery 在 Redis 中放置了太多东西

我的目标是尽可能减少或优化 Redis 使用的内存量

我有一个相当大的 Django 产品,其中 Celery 作业运行“很多”。在我的 settings.py 中有

BROKER_BACKEND = "redis"

来自 top -p13907 Redis 正在使用大量内存(在盒子上它只被 Celery 使用):

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
13907 redis     20   0 10.5g 3.3g  532 S    0 42.8 109:38.94 redis-server  

我找到了这个 CELERY_TASK_RESULT_EXPIRES设置看起来像是我应该添加到我的设置文件中的东西。

默认情况下,从文档看来它设置为 1 天(86400 秒)

这是我想改变的吗?还是我应该研究更多设置?我不确定的另一件事是,如果我添加它,我应该如何决定将其设置为多少“安全”秒数?

最佳答案

我想也许你的 celery 调用者忘记清理结果,这些结果将存储在消息队列服务器中直到过期。在 celery 中,你必须打电话

r.get()

获取结果并将其清理到消息队列中。如果您只访问结果而不调用此函数:

r.result

结果仍然会被消息队列服务器持有并消耗大量内存!

关于django - 如何调整 celery 设置,使 Redis 不使用太多内存? celery 任务 RESULT_EXPIRES?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12273384/

相关文章:

django - 如何在 celery 内为每个用户生成队列?

django - Django View 的 @login_required 装饰器的对立面是什么?

python - Django 非唯一用户名字段警告

redis - 无法阻止工头

python - celery 没有同时执行任务

node.js - 正确的持久化技术

python - Rabbitmq mgmt 上显示未知队列名称。使用 celery 时

django 1.11 与 celery 4.0 和 djcelery 兼容性问题

python - 根据两个字段的总和过滤数据

python - 使用异步事件实现状态引擎的正确方法是什么?