gpt4 book ai didi

python - Celery apply_async 将 kwargs 传递给链中的所有任务

转载 作者:太空宇宙 更新时间:2023-11-03 20:04:30 25 4
gpt4 key购买 nike

一个 Celery 任务队列来计算 (2 + 2) - 3 的结果。

@app.task()
def add(**kwargs):
time.sleep(5)
x, y = kwargs['add'][0], kwargs['add'][1]
return x + y

@app.task()
def sub(**kwargs):
time.sleep(5)
x = args[0]
y = kwargs['sub'][0]
return x - y

示例任务数据 = kwargs = {'add' : (2, 2), 'sub' : (3)}
链接任务:result = (add.s() | sub.s()).apply_async(kwargs = kwargs)

As per design , apply_async 仅将 kwargs 应用于链中的第一个任务。我需要改变什么才能达到预期的结果?

最佳答案

因此,从 Celery v4.4.0rc4 开始,除了将 kwargs 传递给每个任务的签名之外,没有更好的方法可以做到这一点。虽然它看起来确实像 Ask Solem (Celery dev) is open to a feature request.

链应该是这样的:

result = (add.s(job_data = job_data)| sub.s(job_data = job_data)).apply_async()

但是,由于我们的链有 10 多个任务,我必须想出一种更简单的方法来编写它。

# Workflow generator
def workflow_generator(task_list, job_data):
_tasks = tuple(getattr(task, 's')(job_data = job_data) for task in task_list)
return chain(*_tasks).apply_async()

taskList = [add, sub]
job_data = {'add' : (2, 2), 'sub' : (3)}
result = workflow_generator(taskList, job_data)

关于python - Celery apply_async 将 kwargs 传递给链中的所有任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59043618/

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