celery的坑之任務分級

celery鏈式分發任務:

task1.si(**kwargs)|task2.si(**kwargs)|last.si(**kwargs)

即按task1, task2, last的順序分發任務

當執行爲單個任務時,任務會很順暢執行。

但時,當程序分佈式高併發執行時,會發生任務雖然都丟進了隊列中,但是執行優先級無法控制。

比如上一個任務的last丟進隊列後,後面的新開始的task任務也被丟進同一隊列,而程序無法優先執行last任務,導致前一個併發任務永遠阻塞在last任務,無法結束。

對於需求高相應度的系統,這種方法顯然是行不通的。

對於此類情況,我們可以給出兩種解決方案:

1.直接將task1 task2 last綁定爲同步任務,再丟進隊列中

由於task可以將last任務擠到後面,顯然任務併發負載已達到上限,當任務鏈不多時(比如此時的3個任務組成任務鏈),可以應用這種辦法,而不會損耗太多的資源。

 

2.將平行的task1,task2丟到一個主隊列,將last丟進另外的隊列,互不干擾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章