1. 程式人生 > >celery的坑之任務分級

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