Celery 是一個 基於python開發的分佈式異步消息任務隊列,經過它能夠輕鬆的實現任務的異步處理, 若是你的業務場景中須要用到異步任務,就能夠考慮使用celery, 舉幾個實例場景中可用的例子:python
Celery 在執行任務時須要經過一個消息中間件來接收和發送任務消息,以及存儲任務結果, 通常使用rabbitMQ or Redis,後面會講web
Celery有如下優勢:redis
pip install django-celery django
#注:安裝django-celery會自動安裝依賴版本的celerysession
pip install django-celery app
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異步
python manage.py migrateasync
python manage.py migrate分佈式
from celery import task @task def add(x, y): return x + y
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())
python manage.py celery worker --loglevel=info
一、django admin中配置crontab測試
二、添加一個每分鐘執行一次的crontab
三、添加週期任務,並把task和crontab關聯
四、啓動worker 和 beat測試計劃任務
python manage.py celery worker --loglevel=info
python manage.py celery beat --loglevel=info
已看到任務在後臺每分鐘執行一次該任務。