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. python - 獲取到的數(shù)據(jù)生成新的mysql表2. 為什么python中實例檢查推薦使用isinstance而不是type?3. mysql里的大表用mycat做水平拆分,是不是要先手動分好,再配置mycat4. window下mysql中文亂碼怎么解決??5. sass - gem install compass 使用淘寶 Ruby 安裝失敗,出現(xiàn) 4046. python - (初學者)代碼運行不起來,求指導,謝謝!7. 為啥不用HBuilder?8. python - flask sqlalchemy signals 無法觸發(fā)9. python的文件讀寫問題?10. javascript - js 對中文進行MD5加密和python結果不一樣。
