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丟進另外的隊列,互不干擾。