我想從Celery任務返回的列表中創建一個組,以便爲任務結果集中的每個項目添加一個任務。如何將返回列表的Celery任務鏈接到組中?
下面是一個簡單的代碼示例來解釋用例。 ???
應該是上一個任務的結果。
@celery.task
def get_list(amount):
# In reality, fetch a list of items from a db
return [i for i in range(amount)]
@celery.task
def process_item(item):
#do stuff
pass
process_list = (get_list.s(10) | group(process_item.s(i) for i in ???))
我可能無法正確處理這個,但我敢肯定它不是安全地從任務中調用任務:
@celery.task
def process_list():
for i in get_list.delay().get():
process_item.delay(i)
我不從秒任務需要的結果。
的確,不*從任務中調用任務。這會造成死鎖。假設你有一名工人。你把你的任務叫做工作1,然後調用第二個任務。沒有工人來處理這個任務,一切都會掛起。當你添加工作人員時,這種不潔現象會稍微好一些,但是你會一直在用一個任務捆綁多個工人(並且失去並行性)。 – mlissner