我想创建一个芹菜任务 A ,它本身会动态创建诸如 X,Y,Z 等任务,并且它们应该异步运行。任务 A 应该等待任务 X,Y,Z 完成并返回结果。任务 X,Y,Z 也创建自己的任务。假设 X 创建任务 X1,X2,X3 ,它们应该同步运行。任务 X 应该等待 X1,X2,X3 完成并返回结果。 X1,X2,X3 完成后, X 应该发出任务 A 。到目前为止,我所取得的成就如下。
from celery.result import allow_join_result
from celery import group, chain
#My task X1
@task(bind=True, max_retries=3)
def send_data_to_amber(self, amber_id):
print "sending data to amber"
result = publish_data(amber_id)
if result:
return True
return False
#My task X
@task(bind=True, max_retries=3)
def send_data_to_hub(self, hub_id):
tasks = []
for amber in Amber.object.filter(hub_id=hub_id):
tasks.append(send_data_to_amber.s(amber.id))
job = chain(tasks)
result = job.apply_async()
with allow_join_result():
if all(result.join()):
print "all sub tasks completed synchronously"
return True
print "some sub tasks failed"
return False
#My task A
@task(bind=True, max_retries=None)
def prepare_data_sending(self, hub_list):
tasks = []
for hub_id in hub_list:
tasks.append(send_data_to_hub.s(hub_id)
job = group(tasks)
result = job.apply_async()
with allow_join_result():
if all(result.join()):
print "all tasks completed asynchronously"
return True
print "some tasks failed"
return False
我的工人没有接任务。我做错了。?还有其他方法可以达到相同目的吗?什么是工作人员配置?