芹菜rate_limit影响多个任务

问题描述 投票:2回答:1

我有一个兔子和芹菜的设置,工人在4台机器上运行,每台机器有4个实例。我定义了两个任务函数,它们基本上调用相同的后端函数,但其​​中一个名为process_transaction,没有定义rate_limit,另一个名为slow_process_transaction,使用rate_limit="6/m"。这些任务分别在rabbitmq,slownormal上排队。

奇怪的是为两个任务强制执行rate_limit。如果我尝试使用celery.control.rate_limit更改rate_limit,使用process_transaction执行此操作不会更改有效率,并使用slow_process_transaction名称更改两者的有效率。

关于什么是错的任何想法?

python rabbitmq celery
1个回答
6
投票

通过读取存储桶源代码,我发现芹菜通过在完成任务后休眠时间增量来实现速率限制,因此如果您在同一工作人员中混合具有不同速率限制的任务,则它们会相互影响。

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

您可以在celeryd调用上使用节点名称和命名参数来分隔worker。例如,您有节点'fast'和'slow',并且您希望它们分别使用并发5和1的单独队列:

celeryd <other opts> -Q:fast fast_queue -c:fast 5 -Q:slow slow_queue -c:slow 1
© www.soinside.com 2019 - 2024. All rights reserved.