1 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果CELERY_ALWAYS_EAGER
為is True
,則對(duì)的呼叫apply_async()
實(shí)際上被替換為apply()
。返回的結(jié)果是EagerResult
,其中已經(jīng)包含任務(wù)的結(jié)果。
因此,是的,設(shè)置ALWAYS_EAGER = True
將禁用整個(gè)AsyncResult
功能。整個(gè)異步過程將被繞過,并且實(shí)際上沒有任何任務(wù)發(fā)送到代理,這就是為什么您無(wú)法通過檢索結(jié)果的原因AsyncResult
。
CELERY_ALWAYS_EAGER = True
在測(cè)試僅需要Celery結(jié)果的代碼路徑時(shí)使用,并與EagerResult
或一起使用相同的方式AsyncResult
。
如果需要,還有運(yùn)行與測(cè)試的方式AsyncResult
也與CELERY_ALWAYS_EAGER = False
,但對(duì)于這一點(diǎn),你需要調(diào)用任務(wù)在你的測(cè)試用例之前啟動(dòng)工作。然后,工作人員將能夠執(zhí)行您的任務(wù),并且AsyncResult
可以正常工作。您可以看一下django-celery-testworker,它似乎就是這樣做的,盡管我尚未對(duì)其進(jìn)行測(cè)試。
添加回答
舉報(bào)