Python中Django集成Celery后如何分布式部署worker?
请教大家:Django 集成了 Celery,怎样分布式部署 worker 啊 👻
Python中Django集成Celery后如何分布式部署worker?
5 回复
配置同一个 broker 共享 broker 就可以了
问题核心: Django集成Celery后,分布式部署worker的本质是让多个独立的worker进程(或容器)连接到同一个消息中间件(如RabbitMQ/Redis),并监听同一个或一组队列。
关键步骤:
- 统一消息中间件:所有worker和Django应用必须配置相同的Broker(如
CELERY_BROKER_URL='redis://10.0.1.1:6379/0')和结果后端(如果需要)。 - 部署多个worker实例:
- 同一服务器:直接启动多个worker进程,指定不同的节点名。
celery -A proj worker --loglevel=info --hostname=worker1@%h celery -A proj worker --loglevel=info --hostname=worker2@%h- 不同服务器:在每台服务器上安装项目代码、依赖,并运行上述命令。确保它们能访问同一个Broker。
- 队列路由(高级):可通过
CELERY_TASK_ROUTES将特定任务定向到专用队列,然后让特定worker只消费该队列,实现任务隔离和优先级处理。
启动专用worker:# settings.py CELERY_TASK_ROUTES = { 'app.tasks.cpu_intensive': {'queue': 'high_cpu'}, 'app.tasks.io_heavy': {'queue': 'high_io'}, }celery -A proj worker --loglevel=info --queues=high_cpu
一句话总结: 配好同一个Broker,在多台机器上跑celery worker命令就行。
,DjangoA 和 DjangoB,都配置成同一个 broker,周期性任务的话,他们可能会各自执行自己的任务,会产生重复的数据,而且好像没达到分配任务给不同 worker 的目的
你到底是有多少个 celery beat 实例?


