Celery異步任務隊列/周期任務+ RabbitMQ + Django


一、Celery介紹和基本使用 

Celery 是一個 基於python開發的分布式異步消息任務隊列,通過它可以輕松的實現任務的異步處理, 如果你的業務場景中需要用到異步任務,就可以考慮使用celery, 舉幾個實例場景中可用的例子:

  1. 你想對100台機器執行一條批量命令,可能會花很長時間 ,但你不想讓你的程序等着結果返回,而是給你返回 一個任務ID,你過一段時間只需要拿着這個任務id就可以拿到任務執行結果, 在任務執行ing進行時,你可以繼續做其它的事情。 
  2. 你想做一個定時任務,比如每天檢測一下你們所有客戶的資料,如果發現今天 是客戶的生日,就給他發個短信祝福

 

Celery 在執行任務時需要通過一個消息中間件來接收和發送任務消息,以及存儲任務結果, 一般使用rabbitMQ or Redis,后面會講

Celery有以下優點:

  1. 簡單:一單熟悉了celery的工作流程后,配置和使用還是比較簡單的
  2. 高可用:當任務執行失敗或執行過程中發生連接中斷,celery 會自動嘗試重新執行任務
  3. 快速:一個單進程的celery每分鍾可處理上百萬個任務
  4. 靈活: 幾乎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

 

已看到任務在后台每分鍾執行一次該任務。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM