Django使用Celery中間存儲使用Rabbitmq
項目使用環境:
Python==3.6.2
Django==2.0.6
Celery==4.2.1
django-celery==3.2.2
django-celery-result==1.0.4
第一步:創建django項目demo以及項目下的應用home
django-admin.py startproject demo
python manage.py startapp home
第二步:在項目的主配置下demo/demo/settings.py文件中加入
BROKER_URL = 'amqp://guest:guest@localhost:5672//' # 連接rabbitmq
第三步:在項目的主配置目錄下創建文件demo/demo/celery.py
# -*- coding:utf-8 -*-
from __future__ import absolute_import # 注意此項必須放在最上方, 爲了向上版本兼容
import os
from celery import Celery
from django.conf import settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'demo.settings')
django.setup()
app = Celery('demo')
# 自動加載每個應用(app)目錄下的tasks.py文件
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
第四步:在項目的應用中創建異步任務隊列home/tasks.py
# -*- coding:utf-8 -*-
from demo.celery import app
@app.task
def print_hello():
print('Hello World,fvf')
第五步:在項目的應用的視圖函數中調用異步任務隊列home/views.py
# -*- coding:utf-8 -*-
from django.shortcuts import render,render_to_response
from django.http import HttpResponse
from .tasks import print_hello
def index(request):
print_hello.delay()
return HttpResponse(u"歡迎光臨 紅浪漫!")
第六步:在項目的應用的路由設置文件中添加路由home/urls.py
# -*- coding:utf-8 -*-
from django.conf.urls import include, url
from home import views
urlpatterns = [
url(r'^$', views.index),
]
第七步:在項目的主配置文件的初始化文件中增加以下內容home/home/__init__.py
# -*- coding:utf-8 -*-
from home.settings.celery import app as celery_app
__all__ = ["celery_app"]
第八步:在項目的主目錄demo/manage.py文件目錄運行celery隊列
celery -A demo worker --loglevel=info # 其中demo爲celery.py所在目錄
第九步:在項目的主目錄demo/manage.py文件目錄啓動django項目
python3 manage.py runserver 0.0.0.0:8008
第十步:返回消息隊列的信息home/views.py
# -*- coding:utf-8 -*-
from django.shortcuts import render,render_to_response
from django.http import HttpResponse
from .tasks import print_hello
def index(request):
result = print_hello.delay()
id = result.task_id # 獲取消息隊列任務id
print print_hello.AsyncResult(id).get() # 獲取對應id的返回值
return HttpResponse(u"歡迎光臨 紅浪漫!")
第十一步:返回任務存入django使用的數據庫,項目主配置目錄下settings.py文件增加配置
INSTALLED_APPS = [
'django_celery_results'
]
CELERY_RESULT_BACKEND = 'django-db'
第十二步:同步存儲隊列任務結果的表
python3 manage.py migrate django_celery_result
第十三步:Celery提供了一個工具flower,將各個任務的執行情況、各個worker的健康狀態進行監控並以可視化的方式展現
pip3 install flower
第十四步:啓動flower
python3 manage.py celery flower
第十五步:網頁查看,默認端口是5555
http://localhost:5555
注意:以上內容是個人使用的隨手記錄, 就是介紹了下簡單的使用
歡迎大家來吐槽,準備好瓜子飲料礦泉水,開整!!!
---------------------------------------------------------------------------------------
搞笑一則:能動手儘量別吵吵