celery group job 不同queue的使用

celery group 的group 可以实现任务并行,实际上对于不同的task 我们还可以配置不同的queue,实现资源的灵活分配,当然对于queue 的worker 节点,我们可以部署在不同的环境中(比如cpu,gpu分离的场景中),这样实现资源的合理使用

task 定义

  • app.py
from celery import Celery

app = Celery('app',backend="redis://localhost:6379/0", broker='redis://localhost:6379/0')

@app.task(name='app.task_add')
def task_add(x, y):
    return x + y

@app.task(name='app.task_subtract')
def task_subtract(x, y):
    return x - y

group 模式

  • 名称模式 mydemo.py
from celery import Celery,group,signature

app = Celery('app',backend="redis://localhost:6379/0", broker='redis://localhost:6379/0')
# 通过options 对于task 配置不同的queue
taska = app.signature('app.task_add', args=(2, 3),options={'queue': 'queue1'})
taskb = app.signature('app.task_subtract', args=(4, 5),options={'queue': 'queue2'})
group_tasks = group(taska, taskb).apply_async()
print(group_tasks.get())
  • task 快捷方法模式
from app import task_add, task_subtract
from celery import group
def group_task():
    task_group = group(
        # 快捷方式进行queue的设置
        task_add.s(2, 3).set(queue='queue1'),
        task_subtract.s(4, 5).set(queue='queue2')
    )
    result = task_group.apply_async()
    retults = result.get()
    return retults

worker 启动测试

  • queue1 & queue2

对于启动的worker 指定不同的queue,测试效果

celery -A app worker -l INFO --queues queue1
celery -A app worker -l INFO --queues queue2

说明

celery 的group 是一个比较有意思而且强大的实现task 组合的功能,可以方便的实现任务的并行处理,以及资源的分离,实现资源的均衡使用,当然celery 还有其他模式的task 组合,使用好了可以解决不少任务调度问题

参考资料

https://docs.celeryq.dev/en/stable/getting-started/backends-and-brokers/redis.html

https://docs.celeryq.dev/en/stable/userguide/canvas.html#guide-canvas

https://docs.celeryq.dev/en/stable/reference/celery.html#celery.signature

posted on 2025-02-28 08:00  荣锋亮  阅读(62)  评论(0)    收藏  举报

导航