Python3.6、Django2.0使用Celery、Rabbitmq

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

 

注意:以上內容是個人使用的隨手記錄, 就是介紹了下簡單的使用

歡迎大家來吐槽,準備好瓜子飲料礦泉水,開整!!!

---------------------------------------------------------------------------------------

搞笑一則:能動手儘量別吵吵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章