启动多个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一样