celery 4:一对多工作流程,(分割器->映射->缩小)

时间:2019-01-24 02:19:03

标签: python celery

我正在尝试在celery上对工作流进行建模,其中一个任务(拆分器)创建了一组任务(地图),然后将其减少到最终任务中。

import celery
from celery.result import allow_join_result

app = celery.Celery("tasks")
app.conf.update(task_always_eager=True)


@app.task
def splitter(n):
    maps = [map.s(i) for i in range(n)]
    with allow_join_result():
        resp = celery.chord(maps)(reducer.s())
    print("splitter done")
    return resp


@app.task
def map(i):
    print(f"map {i} done")
    return i * i


@app.task
def reducer(results):
    print("reducer done")
    return sum(results)


n = 10
result = splitter.apply_async(args=[n]).get()
print(result.result)

您可以看到结果使映射器任务保持打开状态,直到结束:

map 0 done
map 1 done
map 2 done
map 3 done
map 4 done
map 5 done
map 6 done
map 7 done
map 8 done
map 9 done
reducer done
splitter done
285

该问题的解决方案是从此问题借来的,并适用于芹菜4: Celery Group task for use in a map/reduce workflow

是否可以编写不等待所有其他任务完成的拆分器任务?

0 个答案:

没有答案