配置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的介面
透過命令呼叫一次任務