You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Celery中worker之间的任务负载分发算法是什么?

Celery 多Worker任务负载分配规则说明

Celery本身没有在框架层实现独立的跨Worker负载均衡算法,任务分配逻辑完全由所使用的Broker类型和运行配置决定,常见的分配规则如下:

  • 【默认轮询分配】当使用默认配置(worker_prefetch_multiplier默认值为4)时,绝大多数Broker(RabbitMQ、Redis等)会采用轮询策略,将队列中的任务依次均匀投递给所有在线的Worker,每个Worker会提前预取worker_prefetch_multiplier * 并发进程数的任务缓存到本地执行,直到预取的任务全部消费完成后才会向Broker请求新任务。
  • 【消费能力优先分配】如果将worker_prefetch_multiplier设置为1或0(关闭预取,仅部分Broker支持该配置),Broker会采用按空闲状态分配的逻辑:哪个Worker完成了当前任务、向Broker发起新的任务拉取请求,就把队列中的下一个任务分配给该Worker。这种模式适合任务执行时长差异较大的场景,可避免出现部分Worker堆积大量慢任务、其余Worker空闲的负载不均问题。
  • 【自定义定向分配】你可以通过配置task_routes规则,将指定类型的任务投递到专属队列,仅让特定的Worker组消费该队列,实现按任务类型、业务维度的定向负载分配。如果需要更灵活的分配逻辑,也可以自行实现自定义任务路由器,按照预设的权重、优先级规则给不同Worker分配任务。

注意:如果开启了task_acks_late配置(任务执行完成后再向Broker确认消费),异常中断的Worker上未完成的任务会被Broker重新投递给其他正常运行的Worker,不会出现任务丢失。

内容的提问来源于stack exchange,提问作者Sharvari Gc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:18:02