閱讀的文檔的文檔AsyncResult
有一個collect
方法,因爲他們進來收集結果
http://docs.celeryproject.org/en/latest/reference/celery.result.html#celery.result.AsyncResult.collect
from celery import group
from proj.celery import app
@app.task(trail=True)
def A(how_many):
return group(B.s(i) for i in range(how_many))()
@app.task(trail=True)
def B(i):
return pow2.delay(i)
@app.task(trail=True)
def pow2(i):
return i ** 2
實施例輸出:
>>> from celery.result import ResultBase
>>> from proj.tasks import A
>>> result = A.delay(10)
>>> [v for v in result.collect()
... if not isinstance(v, (ResultBase, tuple))]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
注意: 必須啓用Task.trail
選項,以便將子項列表存儲在result.children
中。這是默認值,但是爲了說明而明確啓用。
嗨,你可能已經很長時間了,因爲你遇到了這個問題,但我想知道你如何使用它來跟蹤沒有阻塞的組任務的進度..?據我所知,我需要分配'result = task_group.apply_async()',但僅僅分配本身就會阻塞。另一方面,如果我們不分配,我們沒有ResultSet方法,它們是'completed_count'等等...... – zerohedge 2017-12-29 09:55:18