运行 celery 组:其中两个任务 运行 并行以获得结果以产生第三个结果
Running celery group: where two tasks are run in parallel to get results to produce a third result
如何设置才能使相关任务运行并行(而不是顺序)以减少整体执行时间
- 我有以下"master"任务
- 依赖于get_latest_close_price(symbol)和option_chain(symbol)celery任务结果
- 主任务转换这两个任务的结果以产生最终的枢轴table
问题是这两个独立的任务都与不同的 API 系统对话以获取输入(有时需要几秒钟才能执行)
我注意到 celery 任务在组语句中的顺序很重要:
- 如果 get_lastest_close_price 是第一个,它在 option_chain 之前得到 运行(并且反之亦然)
- 对我来说,这些语句似乎是 运行 顺序而不是并行
- 我的理解有误吗?
.
@celery.task(name='master_task')
def process_chain(symbol):
# g = group(get_latest_close_price.s(symbol), option_chain.s(symbol))
g = group(option_chain.s(symbol), get_latest_close_price.s(symbol))
results = g()
with result.allow_join_result():
data = results.get()
data = util_transform_option_chain(data[1], data[0])
return({'result':data})
group
肯定会运行并行。 . .如果您有多个工作人员或并发性 > 1。但是,仅供参考——您可能希望将 chord
与 group
结合起来,以按照您想要的方式处理结果。
如何设置才能使相关任务运行并行(而不是顺序)以减少整体执行时间
- 我有以下"master"任务
- 依赖于get_latest_close_price(symbol)和option_chain(symbol)celery任务结果
- 主任务转换这两个任务的结果以产生最终的枢轴table
问题是这两个独立的任务都与不同的 API 系统对话以获取输入(有时需要几秒钟才能执行)
我注意到 celery 任务在组语句中的顺序很重要:
- 如果 get_lastest_close_price 是第一个,它在 option_chain 之前得到 运行(并且反之亦然)
- 对我来说,这些语句似乎是 运行 顺序而不是并行
- 我的理解有误吗?
.
@celery.task(name='master_task')
def process_chain(symbol):
# g = group(get_latest_close_price.s(symbol), option_chain.s(symbol))
g = group(option_chain.s(symbol), get_latest_close_price.s(symbol))
results = g()
with result.allow_join_result():
data = results.get()
data = util_transform_option_chain(data[1], data[0])
return({'result':data})
group
肯定会运行并行。 . .如果您有多个工作人员或并发性 > 1。但是,仅供参考——您可能希望将 chord
与 group
结合起来,以按照您想要的方式处理结果。