子级任务:
说明: 前面学习的任务调用基本上已够用,但有时业务场景可能需要任务关联,且子任务可能需要父任务为其传递一些必要参数,此时可通过func.subtask或简写func.s实现,子任务对象依然可以调用任务对象的API,delay和apply_async,但和常规调用不同的是子任务调用时传递的参数加生成子任务时初始化参数的才是最终任务的参数,所以子任务在调用时就不需要再重复传递子任务初始化时的参数了.
1
2
3
4
5
6
7
>>> mail = send_mail.subtask(('sub','msg'), countdown=1)
>>> mail.delay('limanman')
或
>>> mail = send_mail.s('sub','msg', countdown=1)
>>> mail.delay('limanman')
注意: send_mail.subtask(('sub', 'msg'), countdown=1)或send_mail.s('sub', 'msg', countdown=1)返回的是Signature对象,此对象携带生成子任务时的参数,且可调用任务对象的API,当调用时,传递的参数被提前.
原语操作:
# 使组式:
1
2
3
>>>from celeryimport group
>>> group(send_mail.s(i, i, i)for iin xran