python - 链接 celery 任务并隐式地将返回值从一个任务传递到另一个任务

标签 python celery

我正在尝试执行以下操作

@shared_task
def task1():
    return '1'

@shared_task
def task2(r1):
    return '2'

@shared_task
def task3(r2):
    return 'done'

@shared_task
def job():
    chain = (task1.s() | task2.s() | task3.s() ).apply_async()
    chain()

但我必须显式地给出 task2task3 参数,否则我会出错。

我该怎么做才能让结果流向下一个任务?

最佳答案

您可以直接将附加参数传递给子任务而无需更改任何内容。

chain = (task1.s() | task2.s(r1) | task3.s(r2) ).apply_async()

这里 task1 不接受任何参数,task2 接受两个参数,第一个是前一个任务的结果,第二个是 r1。 task3 也一样。

如果您不需要 task2 中 task1 的结果,那么您可以将 task2 的签名设为不可变。

chain = (task1.s() | task2.si(r1) | task3.s(r2) ).apply_async()

这里 task1 不接受任何参数,task2 只接受一个参数 r1。 Task3 接受两个参数,第一个是前一个任务的结果,第二个是 r2

关于python - 链接 celery 任务并隐式地将返回值从一个任务传递到另一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26998436/

相关文章:

python - 为什么python在time.sleep()之后不打印?

python - 如何在 python shell 中重新加载一个类?

python - Pandas:迭代 df 中的排序行,实现计数器

python - 守护进程模式下的 celery

python - 如何在 celery - rabbitmq 设置中设置消费者优先级?

python - 循环后合并 RDD PySpark

python - 在 MWAA 中设置 PYTHONPATH

python - 发布新任务时Celery Flower "Unknown task"错误

python - 让 Celery 使用 Django 测试数据库

django celery - 如何将 request.FILES ['photo' ] 发送到任务