1. 程式人生 > >django非同步任務(celery+rabbitmq+flower視覺化)

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

配置過程

  1. 在工程settings.py中INSTALLED_APPS中加入djcelery

  2. 新增broker設定
    broker也就是rabbitmq端,是用來儲存訊息的。在settings中新增一下程式碼

import djcelery
djcelery.setup_loader()

CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
BROKER_URL= 'amqp://myuser:[email protected]伺服器ip:5672/vhost'
  1. 在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)

  1. 修改工程目錄裡面的init.py檔案
from __future__ import absolute_import
from .celery import app as celery_app
  1. 註冊任務
from __future__ import absolute_import
from 你的工程名稱.celery import app

@app.task()
def add(x, y):
    return x + y

from 你的工程名稱.celery import app 的app就是剛剛我們弄的。

  1. 啟動celery
    注意celery和flower是分開啟動的
    start /b celery -A 你的工程名.celery:app worker -l info
    (新增start /b 可以讓程式後臺執行,如果是linux系統則在命令後面新增 & 即可)

  2. 啟動flower
    celery -A 你的工程名.celery:app flower -l info
    訪問(localhost:5555)
    在這裡插入圖片描述