我有一個類似於here概述的情況,除了不是用多個參數鏈接任務之外,我想鏈接返回具有多個條目的詞典的任務。芹菜任務鏈和訪問** kwargs
這是 - 非常鬆散和抽象---我想要做的事:
tasks.py
@task()
def task1(item1=None, item2=None):
item3 = #do some stuff with item1 and item2 to yield item3
return_object = dict(item1=item1, item2=item2, item3=item3)
return return_object
def task2(item1=None, item2=None, item3=None):
item4 = #do something with item1, item2, item3 to yield item4
return_object = dict(item1=item1, item2=item2, item3=item3, item4=item4)
return return_object
從IPython中工作,我能夠獨立和異步調用TASK1 ,沒有問題。
我也可以單獨調用TASK2與TASK1作爲雙星參數返回的結果:
>>res1 = task1.s(item1=something, item2=something_else).apply_async()
>>res1.status
'SUCCESS'
>>res2 = task2.s(**res1.result).apply_async()
>>res2.status
'SUCCESS
不過,我最終要實現的是同樣的最終結果同上,但通過鏈條,在這裏,我無法弄清楚如何有TASK2與(位置)參數通過TASK1返回未實例化,但與task1.result爲** kwargs:
chain_result = (task1.s(item1=something, item2=something_else) | task2.s()).apply_async() #THIS DOESN'T WORK!
我懷疑,我可以回去並重寫我的任務,以便t嘿返回位置參數,而不是一個字典,這可能會清除事情,但在我看來,應該有一些方法來訪問任務2中的task1的返回對象與**雙星的等效功能。我也懷疑我在這裏錯過了一些關於Celery子任務實現或* args vs. ** kwargs的相當明顯的東西。
希望這是有道理的。並提前感謝任何提示。
明白了。謝謝。我最終通過稍微改變輸入/返回到我的任務來解決這個問題。 T2現在只是查找一個單詞對象作爲輸入,然後從該詞典中檢索期望的k /值對以執行該任務。 – 2013-02-21 14:50:11
@BenjaminWhite我還是不明白。你能告訴我你是如何做到這一點的 – ashim888 2016-04-01 12:56:26