django非同步任務(celery+rabbitmq+flower視覺化)
文章目錄
安裝rabbitmq
sudo apt-get install rabbitmq-server
新增使用者,myuser為使用者名稱,mypassword為使用者密碼
sudo rabbitmqctl add_user myuser mypassword
新增管理員使用者 myuser為使用者名稱密碼,administrator為管理員標籤
sudo rabbitmqctl set_user_tags myuser administrator
新增虛擬環境
sudo rabbitmqctl add_vhost vhost
設定使用者在虛擬環境下擁有所有許可權
sudo rabbitmqctl set_permissions -p vhost myuser ".*" ".*" ".*"
啟用外掛
rabbitmq-plugins enable rabbitmq_management
可以用剛設定的賬戶登入管理頁面
http://localhost:15672
安裝django-celery,flower
pip install django-celery==3.2.2
pip install flower==0.9.2
配置過程
-
在工程settings.py中INSTALLED_APPS中加入djcelery
-
新增broker設定
broker也就是rabbitmq端,是用來儲存訊息的。在settings中新增一下程式碼
import djcelery
djcelery.setup_loader()
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
BROKER_URL= 'amqp://myuser:[email protected]伺服器ip:5672/vhost'
- 在settings.py同目錄下新增celery.py檔案
替換掉你的工程名稱即可
# coding:utf8
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '你的工程名稱.settings')
app = Celery('proj')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
- 修改工程目錄裡面的init.py檔案
from __future__ import absolute_import
from .celery import app as celery_app
- 註冊任務
from __future__ import absolute_import
from 你的工程名稱.celery import app
@app.task()
def add(x, y):
return x + y
from 你的工程名稱.celery import app
的app就是剛剛我們弄的。
-
啟動celery
注意celery和flower是分開啟動的
start /b celery -A 你的工程名.celery:app worker -l info
(新增start /b 可以讓程式後臺執行,如果是linux系統則在命令後面新增 & 即可) -
啟動flower
celery -A 你的工程名.celery:app flower -l info
訪問(localhost:5555)