flower的使用介紹

celery作為一個(gè)分布式異步任務(wù)隊(duì)列管理工具,我們需要通過(guò)界面化的方式來(lái)進(jìn)行管控任務(wù)的執(zhí)行狀態(tài)和查看任務(wù)執(zhí)行結(jié)果,這里介紹的是flower后端管理頁(yè)面的內(nèi)容。

flower的啟動(dòng)

首先f(wàn)lower作為web頁(yè)面來(lái)管理celery后臺(tái)任務(wù),和任務(wù)隊(duì)列是隔離的,也就是flower的運(yùn)行與否并不會(huì)影響到任務(wù)隊(duì)列的真正執(zhí)行,但是flower中可以通過(guò)API接口來(lái)管理celery中的任務(wù)執(zhí)行。

在django工程目錄下面(和manage.py文件在一個(gè)層級(jí)),具體的執(zhí)行命令:

python manage.py celery flower --basic_auth=floweradmin:12345 --port=8083

由于本人在django工程中已經(jīng)設(shè)置了 BROKER_URL 所以在上述的flower啟動(dòng)命令中就沒(méi)有再次指定隊(duì)列url。

flower界面介紹

本片文章著重進(jìn)行flower界面的介紹,主要是因?yàn)闆](méi)有一個(gè)完整的文檔來(lái)進(jìn)行介紹,所以下面是詳細(xì)介紹flower界面中各個(gè)頁(yè)面展示的內(nèi)容,并且各個(gè)字段的含義。

flower界面

Dashboard

Dashboard 頁(yè)面是展示異步任務(wù)隊(duì)列的主要情況,該頁(yè)面包括如下幾種狀態(tài)的任務(wù):

  • Active: 表示worker從隊(duì)列中獲取到任務(wù),且正在執(zhí)行的任務(wù)數(shù)
  • Processed: 表示worker從隊(duì)列中獲取到任務(wù)的總數(shù)據(jù)量
  • Failed: 表示worker從隊(duì)列中獲取到任務(wù),且執(zhí)行失敗了的(異常退出)
  • Successed: 表示worker從隊(duì)列中獲取到任務(wù),且執(zhí)行成功了的
  • Retried: 表示worker從隊(duì)列中獲取到任務(wù),因?yàn)橐恍┢渌蛑匦聢?zhí)行的數(shù)量

所以,上述這些數(shù)量的關(guān)系如下:
Processed = Active + Received + Failed + Successed + Retried
其中 Received 表示該任務(wù)分配到了worker中,但是還沒(méi)有被處理的任務(wù)數(shù)量

Dashboard頁(yè)面

Worker Name 表示的是執(zhí)行celery任務(wù)的worker名稱(chēng);
Status 表示的是該worker的狀態(tài),包括 Online (在線(xiàn)) 、 Offline(離線(xiàn)),重啟flower進(jìn)程,即可將Offline狀態(tài)的worker剔除掉;
Active / Processed / Failed / Successed / Retried 分別表示該worker正在執(zhí)行的任務(wù)數(shù)、該worker處理的總?cè)蝿?wù)數(shù)、處理失敗的任務(wù)數(shù)、處理成功的任務(wù)數(shù)、重試的任務(wù)數(shù);
Load Average 表示系統(tǒng)在 1min / 5min / 15min 內(nèi)的CPU平均負(fù)載(百分比)

Tasks

Tasks 頁(yè)面是展示所有worker接收到的任務(wù)的處理情況。下面對(duì)該表格中的做一些介紹

Tasks頁(yè)面
  • Name: 表示該任務(wù)的名稱(chēng),默認(rèn)規(guī)則為該函數(shù)的路徑規(guī)則,例如 {模塊名}.{文件名}.{函數(shù)名}
  • UUID: 表示一個(gè)唯一字符串ID用于表示該任務(wù)
  • State: 表示該任務(wù)的狀態(tài),包括: SUCCESS / FAILURE / STARTED / RECEIVED
    • SUCCESS 表示該任務(wù)執(zhí)行完畢且成功
    • FAILURE 表示該任務(wù)執(zhí)行失敗
    • STARTED 表示該任務(wù)正在執(zhí)行
    • RECEIVED 表示該任務(wù)在worker中,只是被接收而已
  • args: 表示該任務(wù)的列表參數(shù)
  • kwargs: 表示該任務(wù)的字典參數(shù)
  • Result: 表示該任務(wù)函數(shù)的返回結(jié)果
  • Received: 表示該任務(wù)在worker接收到的時(shí)間
  • Started: 表示該任務(wù)在worker開(kāi)始執(zhí)行的時(shí)間
  • Runtime: 表示該任務(wù)在worker真正執(zhí)行的耗時(shí)(單位:秒)
  • Worker: 表示該任務(wù)所在的worker名稱(chēng)

Broker

Broker 頁(yè)面展示的是celery連接消息隊(duì)列的信息,包括消息隊(duì)列的訪(fǎng)問(wèn)URL,下面的截圖展示的是鏈接的RabbitMQ,當(dāng)然也可以鏈接Redis等。

Broker頁(yè)面
  • Name: 表示隊(duì)列的名稱(chēng)
  • Messages: 表示該隊(duì)列的消息數(shù)量
  • Unacked: 表示該隊(duì)列中還沒(méi)收到ack確認(rèn)的消息數(shù)量(該消息可能處于 RECEIVED 或是 STARTED
  • Ready: 表示該隊(duì)列中還未分配到worker的消息數(shù)量
  • Consumers: 表示消費(fèi)者數(shù)量(即worker數(shù)量)
  • Idle since: 表示該隊(duì)列空閑的最初時(shí)間,否則為 N/A

Monitor

Monitor 頁(yè)面展示的是celery后臺(tái)任務(wù)的曲線(xiàn)展示狀況。

Monitor頁(yè)面

寫(xiě)在最后

上面介紹完了flower管理頁(yè)面的使用,下面說(shuō)一下,在實(shí)際使用過(guò)程中,由于隊(duì)列阻塞,也就是消費(fèi)者消費(fèi)速率低于生產(chǎn)者的速率造成的情況,我們?cè)撊绾翁幚怼?/p>

這個(gè)時(shí)候我們?yōu)榱丝焖俳鉀Q這個(gè)問(wèn)題,想先盡快清空隊(duì)列該如何操作,重啟worker是解決不了問(wèn)題,并且worker重啟之后,原先在worker中正在處理的任務(wù),由于沒(méi)有返回ack給到隊(duì)列,這些任務(wù)將會(huì)重新放回隊(duì)列中,那么重啟worker之后,worker還是依然從隊(duì)列中獲取并重新執(zhí)行。

像上述截圖中,我們使用的是RabbitMQ作為消息隊(duì)列,那么我們自然可以通過(guò)RabbitMQ的命令或者是RabbitMQ-management來(lái)操作,但是想像一下,這些后臺(tái)都是放在平臺(tái)上,我們無(wú)法直接訪(fǎng)問(wèn)操作,該如何去清理,這里提供一下本人通過(guò)pika來(lái)制作的一個(gè)清空隊(duì)列的函數(shù),并且可以作為HTTP請(qǐng)求來(lái)進(jìn)行操作,可以設(shè)置最大清空隊(duì)列中消息數(shù)量來(lái)進(jìn)行處理,也可以全部清空。

具體的代碼可以訪(fǎng)問(wèn)git代碼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容