【发布时间】:2016-04-10 18:42:35
【问题描述】:
我有两个 rabbitmq 节点,每个节点为运行 Celery 的 5 个节点提供队列。
10 个工作节点中的每一个都以 4 的并发运行 Celery。
当我向每个 Celery 广播 rate_limit 时,速率似乎不是强加的。
我用来广播 rate_limit 的代码:
app = Celery('tasks', broker="amqp://%s:%s@%s/%s" % (config.rabbit_user, config.rabbit_pass, rabbit_ip, config.rabbit_vhost))
app.control.broadcast('rate_limit', arguments={'task_name': 'tasks.read', 'rate_limit': '100/s'})
据我了解,此限制是针对每个工作实例而不是全局的,因此我预计 10 个节点的每个 celery 工作人员每秒有 100 条消息。通常他们每秒消耗大约 500-600,但在广播之后,我在每个节点上每秒得到大约 1.6。我检查了日志,大约每 5 秒有 8 条消息。
将限制提高到 200/s 我得到了 2/s 和 2.4/s 之间的任何地方。
【问题讨论】: