python - celery工作流的問題
問題描述
celery中,我做這樣的處理:一個url經(jīng)過a, b, c三個的函數(shù),分別獲得返回值,其中任意函數(shù)結果均與任意其他函數(shù)結果不相關,然后匯總起來,交給之后的流程.這樣,我自然想到并行運行三個函數(shù)來加快處理速度.然而由于一開始的設計問題, a函數(shù)式被設計成了一次可以處理多個url的形式,而一個一個的處理會非常慢.
@celery.taskdef a(url_list): ’...do something...’ for url in url_list:b.delay(url)
我嘗試這樣控制,然而任務似乎并不能嵌套.那么,如何設計可以比較好的滿足我這種比較奇怪的流程和要求呢?
問題解答
回答1:應該把a;b;c拆開,寫成3個task, 同時數(shù)據(jù)庫里要保存一個狀態(tài)值,用來表示3個任務的執(zhí)行狀態(tài),一個任務執(zhí)行完成后,就修改狀態(tài)值,并檢查其他2個任務是否完成,如果都完成了,就匯總?cè)蝿战Y果,再處理。
回答2:@xiaoboost 手工維護狀態(tài)可行,但有點費事。
Celery 是可以設計執(zhí)行流程的,參考文檔:Designing Work-flows題主的需求可以用 chords 搞定,在 celery task 里返回值就行。
BTW: 注意一下 Celery 配置中與返回值相關的幾個選項,比如這個 task_ignore_result
相關文章:
1. html5和Flash對抗是什么情況?2. html5 - datatables 加載不出來數(shù)據(jù)。3. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個是怎么回事????4. 利用IPMI遠程安裝centos報錯!5. node.js - mongodb查找子對象的名稱為某個值的對象的方法6. 運行python程序時出現(xiàn)“應用程序發(fā)生異常”的內(nèi)存錯誤?7. 測試自動化html元素選擇器元素ID或DataAttribute [關閉]8. javascript - QQ第三方登錄的問題9. javascript - 在 model里定義的 引用表模型時,model為undefined。10. spring-mvc - spring-session-redis HttpSessionListener失效

網(wǎng)公網(wǎng)安備