芹菜rate_limit影响多个任务

Ped*_*eck 2 python rabbitmq celery

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

奇怪的是,rate_limit正在为两个任务执行.如果我尝试使用celery.control.rate_limit更改rate_limit,则使用"process_transaction"执行此操作不会产生任何结果,并且使用"slow_process_transaction"名称会更改两者的rate_limit.

什么是错的?

Ped*_*eck 6

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

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

您可以在celeryd调用上使用节点名称和命名参数来分隔worker.举例来说,你有节点"快"和"慢",你希望他们消耗分别并发5和1个独立的队列:

celeryd <other opts> -Q:fast fast_queue -c:fast 5 -Q:slow slow_queue -c:slow 1
Run Code Online (Sandbox Code Playgroud)