2012-12-21 44 views
2

我有RabbitMQ的和芹菜的设置,对4台机器上运行,每个4个实例的工人。我定义了两个任务函数,它们基本上调用相同的后端函数,但其​​中一个名为“process_transaction”,没有定义rate_limit,另一个名为“slow_process_transaction”,rate_limit =“6/m”。任务在rabbitmq上进入不同的队列,慢而正常。影响多个任务芹菜rate_limit

奇怪的是,该rate_limit正在实施的这两项任务。如果我尝试使用celery.control.rate_limit更改rate_limit,则使用“process_transaction”执行此操作不会产生任何结果,并且使用“slow_process_transaction”名称会更改两者的rate_limit。

什么是错的任何想法?

回答

5

通过阅读斗源代码我想通芹菜实现率完成任务后,睡觉的时间增量限制,所以如果你在同一个工人混用不同速率限制的任务,它们相互影响。

分离工人解决我的问题,但它不是最佳的解决方案。

您可以使用您的通话celeryd节点名称和命名参数分开工人。举例来说,你有节点“快”和“慢”,你希望他们分别占用单独的队列并发5和1:

celeryd <other opts> -Q:fast fast_queue c:fast 5 -Q:slow slow_queue -c:slow 1 
+0

看起来像我碰到了同样的问题。谢谢你的提示。如果你不介意分享,你会发现你究竟是如何分割你的工人/队列的。...... – gingerlime

+1

我刚刚编辑了这篇文章解释了如何。 –

+0

谢谢!非常感激。 – gingerlime