如何在不阻塞执行的情况下删除Chord执行后的中间结果?
需求流程
- 并行分发多个任务(multiple tasks)
- 将所有任务结果聚合(Aggregate)为最终结果
- 在Chord结果就绪后立即删除中间结果(intermediate results),且不阻塞执行
中间结果的问题所在?
使用CouchDB作为结果后端,它不支持TTL特性。由于仅需聚合后的结果,中间结果往往体积庞大且冗余。
预期实现示例草图
from celery import chord @app.task def worker_task(arg): return compute_something(arg) @app.task def aggregate(results): return sum(results) def cleanup(final_result): for r in final_result.parent.results: r.forget() promise = chord((worker_task.s(arg) for arg in inputs))(aggregate.s()) promise.then(cleanup)
附:AsyncResult实际上有then()方法,但我不清楚如何使用它。
内容的提问来源于stack exchange,提问作者Temax
相关产品推荐
相关产品推荐

