启动多个worker:
celery -A apps worker -l INFO -n worker1@%h -Q apps_task1
1.启动多个worker,但是不指定worker名字
2.可以为每个worker指定一个节点名字,使用--hostname或-n选项
-n worker1@%h
%h:主机名,包括域名。
%n:仅限主机名。
%d:仅限域名。
配置多个队列:
1.apply_async(queue=队列名)
2.app.task(queue=队列名)
3.配置文件的方式
CELERY_QUEUES = (
Queue('apps_task1', exchange=Exchange('apps_task1'), routing_key='apps_task1'),
Queue('apps_task2', exchange=Exchange('apps_task2'), routing_key='apps_task2'),
)
CELERY_ROUTES = {
'apps.task1.add': {'queue': 'apps_task1', 'routing_key': 'apps_task1'},
'apps.task2.subs': {'queue': 'apps_task2', 'routing_key': 'apps_task2'},
}
注意:
1.CELERY_ROUTES的作用是,给任务分配queue和routing_key,然后worker根据分配的queue值执行相应的任务。
2.CELERY_ROUTES中的key得指定到方法名
3.exchange可以不用,这是rabbitmq必须的,redis可以不用
4.queue和routing_key这两个值的名字不需要保持一致,那么为了方便使用和检查,最好还是保持一致。
5.CELERY_ROUTES中其实可以不用指定routing_key,和apply_async方法只传queue一样