Celery非同步排程框架(二)與Django結合使用

昀溪發表於2019-01-31

配置Celery與Django結合

需要安裝的外掛

# 用於在Django中執行任務
pip install django-celery-beat
# 這個是把任務執行結果儲存到django-orm中也就是資料庫中的外掛
pip install django-celery-results
# 整合到Django admin中的Celery管理外掛
pip install django-celery-admin

建立celery.py檔案

在settings.py同級目錄下建立celery.py檔案,用於建立celery例項

這裡設定環境變數可以有另外一種非硬編碼的方式

修改__init__.py檔案

修改settings.py檔案

建立任務

我這裡新建了一個app叫做mytasks,其實你在任意現有的app下面建立tasks.py檔案都可以。在settings.py檔案中的INSTALLED_APPS中把我新建的mytasks安裝進來。

排程任務

在mysite這個APP中呼叫任務

啟動worker和Django

進入到專案目錄也就是和manage.py的同級目錄,命令中寫的DjangoDemo是專案名稱。為什麼寫這個名字?其實和之前啟動worker是一樣的,因為在DjangoDemo中有一個叫做celery.py的檔案,如果不叫這個檔案就需要DjangoDemo.檔案來指定Celery的APP入口檔案。

啟動Django進行呼叫

使用Django資料庫儲存執行結果

修改settings.py檔案

再次去呼叫之前的URL你就會發現資料庫有結果,這意味著你以後可以透過task_id從資料庫中查詢結果。

配置定時任務

在配置檔案中寫定時任務

啟動worker

啟動beat服務

在worker上檢視結果

其實這裡可以看出我這裡根本沒有啟動Django或者說這裡跟Django沒有什麼關係。因為Celery本身也不依賴Django.

透過Web形式配置定時任務

這種形式就需要用到Django了

這裡用到了一個新的APP也就是之前需要安裝的django_celery_beat

做資料遷移操作

啟動Django並開啟admin後臺

Crontabs就是做計劃任務的
Intervals是簡單的定時任務,比如每個幾秒或者幾分鐘這種週期性任務
Periodic tasks要執行的任務在這裡配置

新增任務

配置好之後啟動worker

啟動beat服務,這裡需要增加一個引數函式是使用資料庫中的任務排程配置

celery -A DjangoDemo beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler

 

在worker中檢視結果

需要注意的是每次修改資料庫的定時任務執行配置你都需要重啟beat服務,否則它無法感知這個變化。

監控

這裡就用到Flower了,這個flower可以安裝到其他機器,我這裡就安裝到其他伺服器上然後執行centos 7預設的也是Python2.7 我自己安裝了Python3.7 所以我進入到編譯安裝後的目錄裡/usr/local/python3/bin中,然後pip3 install flower安裝完畢後執行。

然後我在筆記本上啟動一個worker

開啟flower的介面

透過命令呼叫一次任務

 

相關文章