python - celery工作流的問題
問題描述
celery中,我做這樣的處理:一個url經(jīng)過a, b, c三個的函數(shù),分別獲得返回值,其中任意函數(shù)結(jié)果均與任意其他函數(shù)結(jié)果不相關(guān),然后匯總起來,交給之后的流程.這樣,我自然想到并行運(yùn)行三個函數(shù)來加快處理速度.然而由于一開始的設(shè)計問題, a函數(shù)式被設(shè)計成了一次可以處理多個url的形式,而一個一個的處理會非常慢.
@celery.taskdef a(url_list): ’...do something...’ for url in url_list:b.delay(url)
我嘗試這樣控制,然而任務(wù)似乎并不能嵌套.那么,如何設(shè)計可以比較好的滿足我這種比較奇怪的流程和要求呢?
問題解答
回答1:應(yīng)該把a(bǔ);b;c拆開,寫成3個task, 同時數(shù)據(jù)庫里要保存一個狀態(tài)值,用來表示3個任務(wù)的執(zhí)行狀態(tài),一個任務(wù)執(zhí)行完成后,就修改狀態(tài)值,并檢查其他2個任務(wù)是否完成,如果都完成了,就匯總?cè)蝿?wù)結(jié)果,再處理。
回答2:@xiaoboost 手工維護(hù)狀態(tài)可行,但有點(diǎn)費(fèi)事。
Celery 是可以設(shè)計執(zhí)行流程的,參考文檔:Designing Work-flows題主的需求可以用 chords 搞定,在 celery task 里返回值就行。
BTW: 注意一下 Celery 配置中與返回值相關(guān)的幾個選項,比如這個 task_ignore_result
相關(guān)文章:
1. html5 - javascript讀取自定義屬性的值,有的能夠取到,有的取不到怎么回事??2. javascript - 關(guān)于微信掃一掃的技術(shù)問題3. html - Python2 BeautifulSoup 提取網(wǎng)頁中的表格數(shù)據(jù)及連接4. python - PyCharm里的一個文件不小心忽略了wx包5. android - VideoView與百度Map沖突6. python - (2006, ’MySQL server has gone away’)7. 小白學(xué)python的問題 關(guān)于%d和%s的區(qū)別8. python - 使用eclipse運(yùn)行django代碼,修改了views.py這個文件,但是瀏覽器顯示的還是原有沒修改的結(jié)果,怎么處理?9. django - pycharm 如何配置 python3 的開發(fā)環(huán)境?10. win10 Apache24+PHP8.0,Apache不能正常加載php.ini。
