Django、Celery、Flower集成:異步任務(wù)與監(jiān)控

一、Celery

1、celery是一個(gè)分布式任務(wù)隊(duì)列:

簡(jiǎn)單:幾行代碼就可以創(chuàng)建一個(gè)簡(jiǎn)單的Celery任務(wù)

高可用:工作機(jī)會(huì)自動(dòng)重試

快速:可以執(zhí)行一分鐘上百萬(wàn)的任務(wù)

靈活:每一塊都可擴(kuò)展

2、大量需要使用異步任務(wù)的場(chǎng)景

發(fā)送電子郵件、發(fā)送IM消息通知

爬取頁(yè)面,數(shù)據(jù)分析

圖像、視頻處理

生成報(bào)告、深度學(xué)習(xí)

3、搭建celery環(huán)境,參考官方文檔:https://docs.celeryproject.org/en/master/getting-started/first-steps-with-celery.html#first-steps

安裝celery:pip install celery

安裝消息傳輸代理,我使用的是redis,用docker安裝很方便,再安裝redis的依賴:pip install redis

4、創(chuàng)建第一個(gè)celery任務(wù),參考官方文檔,首先創(chuàng)建一個(gè)文件tasks.py

第一個(gè)參數(shù)指當(dāng)前模塊,第三個(gè)參數(shù)是broker關(guān)鍵字參數(shù),指定要使用的消息代理的URL,我這里使用的是redis

進(jìn)入tasks.py文件所在目錄,運(yùn)行celery,通過使用worker參數(shù)執(zhí)行:

運(yùn)行成功后,如圖:

二、Celery的監(jiān)控和管理Flower

Flower是一個(gè)基于web的celery實(shí)時(shí)監(jiān)控和管理工具。它正在積極開發(fā)中,但已經(jīng)是一個(gè)必不可少的工具。

它可以實(shí)時(shí)監(jiān)控celery事件、遠(yuǎn)程控制等。

參考官方文檔:https://docs.celeryproject.org/en/master/userguide/monitoring.html,安裝pip install flower

啟動(dòng)Flower:

通過瀏覽器訪問http://localhost:5555/dashboard,就可以看到可視化界面了

三、Django與Celery集成

參考官方文檔:https://docs.celeryproject.org/en/master/django/first-steps-with-django.html

根據(jù)官方文檔,3.1版本之后的celery不需要單獨(dú)的庫(kù)與Django一起使用。

新建celery.py文件在Django的proj/proj/celery.py目錄下,文件內(nèi)容官方提供如圖:

在proj/proj/_init__.py模塊中導(dǎo)入此應(yīng)用程序。這可確保在Django啟動(dòng)時(shí)加載應(yīng)用程序,以便@shared_task裝飾器使用它:

settings.py中可以增加配置,有哪些配置可以參考:https://docs.celeryproject.org/en/master/userguide/configuration.html#configuration

創(chuàng)建一個(gè)任務(wù),我這里的任務(wù)是一個(gè)釘釘消息通知的任務(wù),編寫tasks.py文件:

場(chǎng)景是在用戶登錄成功后,發(fā)送釘釘消息。使用tasks.py中的方法的delay()延遲調(diào)用,任務(wù)會(huì)被扔到celery的隊(duì)列里面去異步執(zhí)行。

到這一步就簡(jiǎn)單的完成了Django與celery的集成,這時(shí)我們啟動(dòng)所有的組件:redis啟動(dòng)、celery啟動(dòng)、Flower啟動(dòng)、Django啟動(dòng),執(zhí)行一下登錄接口,然后檢查Flower界面,celery的處理結(jié)果可以在Flower上查看:

官方文檔還提到:也可以使用django ORM/Cache存儲(chǔ)結(jié)果。首先安裝pip install django-celery-results;

編輯settings.py,將django_celery_results增加到INSTALLED_APPS:

執(zhí)行數(shù)據(jù)庫(kù)遷移創(chuàng)建表: python manage.py migrate django_celery_results;

配置celery的結(jié)果存儲(chǔ)后端:

這樣就可以了,我們執(zhí)行一下任務(wù),看一下結(jié)果是否存儲(chǔ)到數(shù)據(jù)庫(kù)表中:

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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