一、Celery介紹和基本使用
Celery 是一個 基於python開發的分布式異步消息任務隊列,通過它可以輕松的實現任務的異步處理, 如果你的業務場景中需要用到異步任務,就可以考慮使用celery, 舉幾個實例場景中可用的例子:
- 你想對100台機器執行一條批量命令,可能會花很長時間 ,但你不想讓你的程序等着結果返回,而是給你返回 一個任務ID,你過一段時間只需要拿着這個任務id就可以拿到任務執行結果, 在任務執行ing進行時,你可以繼續做其它的事情。
- 你想做一個定時任務,比如每天檢測一下你們所有客戶的資料,如果發現今天 是客戶的生日,就給他發個短信祝福
Celery 在執行任務時需要通過一個消息中間件來接收和發送任務消息,以及存儲任務結果, 一般使用rabbitMQ or Redis,后面會講
Celery有以下優點:
- 簡單:一單熟悉了celery的工作流程后,配置和使用還是比較簡單的
- 高可用:當任務執行失敗或執行過程中發生連接中斷,celery 會自動嘗試重新執行任務
- 快速:一個單進程的celery每分鍾可處理上百萬個任務
- 靈活: 幾乎celery的各個組件都可以被擴展及自定制
二、Django-Celery安裝
pip install django-celery
#注:安裝django-celery會自動安裝依賴版本的celery
三、Django settings設置celery
pip install django-celery
import djcelery djcelery.setup_loader() BROKER_URL = 'amqp://172.17.0.8:5672' RESULT_BACKEND = 'amqp://172.17.0.8:5672' INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'djcelery', #app這里要增加djcelery ) CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
注:這里Celery broker我用的RabbitMQ ,也可以用redis
四、創建django-celery所需要的表
python manage.py migrate
五、在django app根目錄中創建tasks.py
python manage.py migrate
from celery import task @task def add(x, y): return x + y
六、View中調用定義的task
from django.shortcuts import render,HttpResponse
from web import tasks
def show(request):
res = tasks.add.delay(3,3)
print("start running task")
print("async task res",res.get() )
return HttpResponse('結果: %s'%res.get())
七、啟動worker並調用VIEW測試
python manage.py celery worker --loglevel=info
八、Celery定時周期任務
1、django admin中配置crontab
2、添加一個每分鍾執行一次的crontab
3、添加周期任務,並把task和crontab關聯

4、啟動worker 和 beat測試計划任務
python manage.py celery worker --loglevel=info
python manage.py celery beat --loglevel=info
已看到任務在后台每分鍾執行一次該任務。