gpt4 book ai didi

Python+ celery : Chaining jobs?

转载 作者:IT老高 更新时间:2023-10-28 21:58:34 26 4
gpt4 key购买 nike

Celery documentation表明让任务等待其他任务的结果是一个坏主意……但是建议的解决方案(参见“好”标题)留下了一些不足之处。具体来说,没有明确的方法可以将子任务的结果返回给调用者(而且,这有点难看)。

那么,有没有办法“链接”作业,让调用者得到最终作业的结果?例如,使用 add 示例:

>>> add3 = add.subtask(args=(3, ))
>>> add.delay(1, 2, callback=add3).get()
6

或者,是否可以返回 Result 的实例?例如:

@task
def add(x, y, callback=None):
result = x + y
if callback:
return subtask(callback).delay(result)
return result

这将使链中“最终”作业的结果可以通过简单的方式检索:

result = add(1, 2, callback=add3).delay()
while isinstance(result, Result):
result = result.get()
print "result:", result

最佳答案

你可以用 celery 链做到这一点。见 https://celery.readthedocs.org/en/latest/userguide/canvas.html#chains

@task()
def add(a, b):
time.sleep(5) # simulate long time processing
return a + b

链式工作:

# import chain from celery import chain
# the result of the first add job will be
# the first argument of the second add job
ret = chain(add.s(1, 2), add.s(3)).apply_async()

# another way to express a chain using pipes
ret2 = (add.s(1, 2) | add.s(3)).apply_async()

...

# check ret status to get result
if ret.status == u'SUCCESS':
print "result:", ret.get()

关于Python+ celery : Chaining jobs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3901101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com