celery 可视化_Django中Celery的实现介绍(一)
Django中Celery的實現
Celery介紹
Celery是基于Python開發的一個分布式任務隊列框架,支持使用任務隊列的方式在分布的機器/進程/線程上執行任務調度。
上圖展示的是Celery的架構,它采用典型的生產者-消費者模式,主要由三部分組成:broker(消息隊列)、workers(消費者:處理任務)、backend(存儲結果)。
消息中間件:Celery本身不提供消息服務,但是可以方便的和第三方提供的消息中間件集成。包括,RabbitMQ, Redis, MongoDB (experimental), Amazon SQS (experimental),CouchDB (experimental), SQLAlchemy (experimental),Django ORM (experimental), IronMQ。
任務執行單元:Worker是Celery提供的任務執行的單元,worker并發的運行在分布式的系統節點中。
任務結果存儲:Task result store用來存儲Worker執行的任務的結果,Celery支持以不同方式存儲任務的結果,包括AMQP, Redis,memcached, MongoDB,SQLAlchemy, Django ORM,Apache Cassandra, IronCache。
實際應用中,用戶從Web前端發起一個請求,我們只需要將請求所要處理的任務放入任務隊列broker中,由空閑的worker去處理任務即可,處理的結果會暫存在后臺數據庫backend中。我們可以在一臺機器或多臺機器上同時起多個worker進程來實現分布式地并行處理任務。
安裝
pip install django? 安裝django
pip install celery==3.1.23?安裝celery
pip install django-celery? 安裝django-celery
對Redis的支持需要額外的依賴。你可以用 celery[redis] 捆綁 同時安裝 Celery 和這些依賴
pip install -U celery[redis]
pip install python-jenkins? 安裝jenkins
消息隊列
yum install -y rabbitmq-server? 安裝rabbitmq
環境變量PATH加入/usr/lib/rabbitmq/bin
rabbitmq-plugins enable rabbitmq_management ?啟用web管理插件
chkconfig rabbitmq-server on ?開機自啟動
/etc/init.d/rabbitmq-server start ?啟動RabbitMQ
增加用戶
rabbitmqctl add_user shhnwangjian 123456
rabbitmqctl set_user_tags shhnwangjian administrator
命令執行成功后,rabbitmq-server就已經安裝好并運行在后臺了。
WEB頁面訪問:http://ip地址:15672/
另外也可以通過命令rabbitmq-server來啟動rabbitmq server以及命令rabbitmqctl stop來停止server。
django中celery實現
創建項目和app
django-admin.py startproject celery-wj
cd celery-wj
django-admin.py startapp app01
配置settings.py
當djcelery.setup_loader()運行時,Celery便會去查看INSTALLD_APPS下包含的所有app目錄中的tasks.py文件,找到標記為task的方法,將它們注冊為celery task。
BROKER_URL和CELERY_RESULT_BACKEND分別指代你的Broker的代理地址以及Backend(result store)數據存儲地址。
在Django中如果沒有設置backend,會使用其默認的后臺數據庫用來存儲數據。注意,此處backend的設置是通過關鍵字CELERY_RESULT_BACKEND來配置,與一般的.py文件中實現celery的backend設置方式有所不同。一般的.py中是直接通過設置backend關鍵字來配置,如下所示:
test = Celery('tasks', backend='redis://10.10.83.162:16379/0', broker='redis://10.10.83.162:16379/9')
Django下要查看其他celery的命令,包括參數配置、啟動多worker進程的方式都可以通過python manage.py celery --help來查看:
創建一個task
# -*- coding: utf-8 -*-
from celery import task
@task
def add(x, y):
return x + y
注意:與一般的.py中實現celery不同,tasks.py必須建在各app的根目錄下,且不能隨意命名。
views.py
# -*- coding: utf-8 -*-
from django.shortcuts import HttpResponse, render, redirect, HttpResponseRedirect
from app01 import tasks
def add_test(request):
result = tasks.add.delay(2, 2)
print result
if result.ready():
print "Task has run"
if result.successful():
print "Result was: %s" % result.result
else:
if isinstance(result.result, Exception):
print "Task failed due to raising an exception"
raise result.result
else:
print "Task failed without raising exception"
else:
print "Task has not yet run"
return HttpResponse(result)
urls.py
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^add/$', views.add_test, name='add'),
]
#先啟動服務
python manage.py runserver 0.0.0.0:9008
#再啟動worker
python manage.py celery worker -c 4 --logievel=info
通過terminal測試task
python manage.py shell
>>> from app01 import tasks
>>> tasks.add.delay(3,5)
通過頁面訪問測試task
Celery的可視化監控工具flower
1.安裝flower
pip install flower
2.啟動
python manage.py celery flower --port=9008(默認是5555端口)
3.幫助
python manage.py celery flower --help
4.可視化頁面
http://localhost:9008
Django中如何使用django-celery完成異步任務:http://www.weiguda.com/blog/73/
總結
以上是生活随笔為你收集整理的celery 可视化_Django中Celery的实现介绍(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中a and b什么意思_P
- 下一篇: 计算机房防火要求,信息机房如何进行防火设