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
浙公网安备 33010602011771号