【发布时间】:2021-01-08 14:11:30
【问题描述】:
我有一个 Django 应用程序,它使用 Celery 和 Redis 代理来执行异步任务。目前,该应用有 3 个队列(和 3 个工作人员)连接到单个 Redis 实例进行通信。在这里,前两个工人是基于prefork的工人,第三个是一个基于gevent的工人。
有关代理和后端的 Celery 设置变量如下所示:
CELERY_BROKER_URL="redis://localhost:6379/0"
CELERY_RESULT_BACKEND="redis://localhost:6379/1"
由于 Celery 使用 rpush-blpop 来实现 FIFO 队列,我想知道对于不同的队列使用不同的 Redis 数据库是否正确甚至可能,例如 - q1 使用数据库 .../1 和 q2 使用数据库 .../2用于消息传递?这样每个工作人员将只听专门的数据库并从队列中提取任务,竞争较少。
- 这有什么意义吗?
- 如果是这样,您如何在 Celery 中实现类似的功能?
【问题讨论】:
-
为什么选择 Redis 作为代理而不是 RabbitMQ?它应该处理的负载是多少?
-
主要是简单。 Celery Redis 配置对我来说似乎非常简单,我就选择了它。
标签: python django redis celery worker