Celery 与 Django 中的 Redis 代理:任务成功执行,但仍有太多持久的 Redis 键和连接

Posted

技术标签:

【中文标题】Celery 与 Django 中的 Redis 代理:任务成功执行,但仍有太多持久的 Redis 键和连接【英文标题】:Celery with Redis broker in Django: tasks successfully execute, but too many persistent Redis keys and connections remain 【发布时间】:2019-06-11 03:33:10 【问题描述】:

我们的 Python 服务器(Django 1.11.17)使用 Celery 4.2.1 和 Redis 作为代理(我们使用的 pip redis 包是 3.0.1)。 Django 应用部署到 Heroku,Celery 代理是使用 Heroku 的 Redis Cloud 插件设置的。

我们拥有的 Celery 任务肯定应该在一分钟内完成(中位完成时间约为 100 毫秒),但我们看到 Redis 密钥和连接的持续时间比这要长得多(长达 24 小时) .否则,任务正在正确执行。

是什么导致了我们的 Redis 代理中的这些持久密钥和连接? Celery 任务结束后如何清除它们?

这是 Redis Labs 的屏幕截图(所有任务都应该已完成,因此我们希望零键和零连接):

【问题讨论】:

【参考方案1】:

解决了我自己的问题:如果 CELERY_IGNORE_RESULT 配置变量设置为 True(我可以这样做,因为我不使用任务的任何返回值),那么键和连接又回来了受到控制。

来源:Celery project documentation

【讨论】:

以上是关于Celery 与 Django 中的 Redis 代理:任务成功执行,但仍有太多持久的 Redis 键和连接的主要内容,如果未能解决你的问题,请参考以下文章

python测试开发django-157.celery异步与redis环境搭建

celery+django+redis使用介绍

如何限制 django 网站的 redis/celery 任务?

xadmin引入celery执行异步任务与定时任务

带有 Celery 的 redis 键的自定义前缀

Redis与Celery基础