python 将Celery任务链接/分组到单独的码头集装箱中

wfveoks0  于 2023-01-01  发布在  Python
关注(0)|答案(1)|浏览(112)

我已经用了几个月的celery ,偶然发现了一个案例,我只是没有看到任何信息,甚至我打算实现的例子。
在这个特定的例子中,我有一个运行API的Docker容器和另外两个运行celery 工人的单独容器。
我已经定义了队列和任务,并使用send_task方法调用了一个任务。
r =celery 应用程序发送任务(“任务a”)
类似地,我有另一个带有“task_B”的容器,可以用与“task_a”相同的方式调用它。
有没有办法把这两个任务链接在一起,同时把task_a的结果传递给task_B?

goucqfw6

goucqfw61#

如果您使用Celery〉v3.0.0,则可以使用链接。
因此,如果希望task_B使用task_a的结果运行,可以执行以下操作。

from celery import chain

@task()
def task_a(a, b):
    time.sleep(5)
    return a + b

@task()
def task_b(a, b):
    time.sleep(5)
    return a + b

# the result of the first job will be the first argument of the second job
res = chain(task_a.s(1, 2), task_b.s(3)).apply_async()

# Alternatively, you could do the following

res_2 = (task_a.s(1, 2) | task_b.s(3)).apply_async()

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

相关问题