如何使用芹菜组和链实现同步和异步任务的组合?

时间:2019-03-19 09:37:38

标签: celery django-celery celery-task

我想创建一个芹菜任务 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

我的工人没有接任务。我做错了。?还有其他方法可以达到相同目的吗?什么是工作人员配置?

0 个答案:

没有答案