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 进行处理;其它未指定的还是使用默认的队列