基于RabbitMQ的Celery多节点部署及任务队列执行顺序疑问
Celery多节点任务调度问题解答
不需要等待队列中已有的100万个任务全部执行完毕,新提交的任务会和现有任务一起被多个Celery节点并行处理,具体逻辑如下:
- 当新增Celery节点连接同一RabbitMQ Broker后,所有节点(原节点+新节点)都会作为消费者从任务队列中获取任务执行。RabbitMQ会将队列中的任务分发给当前空闲的worker节点,不会让新任务一直积压在百万任务之后。
- Celery worker默认采用预取机制(默认预取4个任务,可通过
CELERY_WORKER_PREFETCH_MULTIPLIER参数调整),但只要有空闲的worker存在,新进入队列的任务很快会被分配出去执行,无需等待全部旧任务完成。 - 如果需要让新任务获得更高的执行优先级,可以给RabbitMQ队列配置优先级特性(声明队列时指定
x-max-priority参数),同时在Celery中配置对应优先级参数,将新任务发送到高优先级队列,worker会优先处理这类任务。
内容的提问来源于stack exchange,提问作者Ghyath Mo
相关产品推荐
相关产品推荐

