Skip to content

Celery 配置多队列

本篇记录最简单的使用多队列的一种方式:改用 apply_async() 调用,同时指定队列;然后使用新 worker 运行

1. 从 .delay() 改成 .apply_async()

python
@shared_task
def mytask(a, b):
    pass

# 之前的调用方式
mytask.delay(a, b)

# 为了指定队列,改为 apply_async 调用方式
mytask.apply_async(args=(a, b), queue='myqueue')
  • 指定的队列名称 myqueue 无需提前创建或配置,可以是任意字符串
  • apply_async 使用方式有所不同,注意参数使用方式

2. 添加新的 celery worker

bash
celery -A proj worker -Q myqueue
  • 在 worker 后添加 -Q 参数,后接队列名称
  • 队列名称保持与 apply_async 中定义的一致
  • 如果是使用 supervisor 管理,则可以新增一个配置;之前的 celery 进程无需改动
  • 最终是指定了 myqueue 这个队列的任务会通过这个 worker 进行处理;其它未指定的还是使用默认的队列

参考