gpt4 book ai didi

python - 具有 Redis 后端的 Celery v4 组任务行为

转载 作者:可可西里 更新时间:2023-11-01 11:18:10 26 4
gpt4 key购买 nike

所以我已经使用 celery v3.x 一段时间了,并考虑在正式发布后迁移到 v4。现在,我正在使用可通过 PyPI 获得的 v4.0.2。这两个版本几乎没有不匹配的地方,但让我感到困惑的是:

这是我的任务文件:

from celery import group, chord
from worker import app


@app.task(name='task')
def task(i):
return i


@app.task(name='remaining')
def dummy(result):
print result

@app.task(name='mainTask')
def mainTask():
groupTask = group([task.s(i) for i in range(0,10)])
job = chord(groupTask, dummy.s())()
return job

当我调用 mainTask 时,后续的组任务会执行,但是当我尝试通过 dummy 打印该任务的结果时,结果的顺序是搞砸了。示例输出为:

[0, 1, 2, 3, 4, 8, 6, 9, 7, 5]

奇怪的是,只有当结果后端是 redis 时才会发生这种情况。在使用 amqp 时,结果会按准确的顺序出现,例如:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

P.S.,旧版本的 celery 中不存在这种行为。 Redis 和 amqp 以正确的顺序返回结果。有什么我想念的吗?

最佳答案

为可能面临相同问题的任何其他人发布此答案。

celery 中的 redis 后端代码以这样的方式编写,即结果被推送到 redis 列表,一旦完成,顺序就会发生变化。

我在 celery 的 github 问题页面上发布了相同的查询并得到了 answer来自其中一位贡献者。

关于python - 具有 Redis 后端的 Celery v4 组任务行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41800124/

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