从Celery的taskset_id中检索GroupResult?

And*_*rea 9 python celery celery-task

我正在使用官方文档中描述的芹菜组开始一组芹菜任务

我还将组(taskset)id存储到db中,以便轮询celery以获取任务集状态.

job = group([
        single_test.s(1, 1),
        single_test.s(1, 2),
        single_test.s(1, 3),
    ])

result = job.apply_async()

test_set = MyTestSet()
test_set.taskset_id = result.id

# store test_set into DB
Run Code Online (Sandbox Code Playgroud)

有没有办法result从任务集ID开始获取GroupResult对象(即我的)?像这个问题所做的事情,但与芹菜组合作.

我已经尝试过:

r = GroupResult(taskset_id)
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为r.results()它总是空的.

我应该使用GroupResult.save()GroupResult.restore() 方法吗?

小智 20

是的,你必须保存结果然后恢复它.

job = group([
    single_test.s(1, 1),
    single_test.s(1, 2),
    single_test.s(1, 3),
])
result = job.apply_async()
result.save()

from celery.result import GroupResult
saved_result = GroupResult.restore(result.id)
Run Code Online (Sandbox Code Playgroud)

我遇到了同样的问题,在看到你关于保存/恢复的暗示之后最终弄明白了.

  • 在celery 4.1.0(潜在调用)中,您必须将应用程序实例传递给还原方法:GroupResult.restore(result.id,app = group.app) (2认同)