我有多个任务我想设置为在parallell中执行。
这让我感觉像是:
@task()
def update_packages():
return [1, 2, 3]
@task()
def update_versions(package):
# Get versions
return [1, 2, 3]
@task()
def update_releases(version):
# Get releases
我能做的是按顺序执行它们并等待结果,但我宁愿推送中间结果,就像在shell上一样:
update_packages | update_versions | update_releases
什么魔法的召唤会实现这个目标?
答案 0 :(得分:1)
我认为,您正在寻找groups和Scatter-Gather模式:
@task()
def update_packages():
res = group(update_versions.s(i) for i in [1, 2, 3])() # run tasks in parallel (Scatter)
res.get() # wait for all results (Gather)
return res
@task()
def update_versions(package):
# Get versions
res = group(update_packages.s(i) for i in [1, 2, 3])() # run tasks in parallel (Scatter)
res.get() # wait for all results (Gather)
return res
@task()
def update_releases(version):
# Get releases
return <what you want to see in final>
现在您可以简单地运行update_packages
并等待所有结果:
res = update_packages()
您不需要使用.delay
,因为update_packages
本身不做任何工作。