Django+django-celery-results+celery+redis+flower

2,685 阅读2分钟

一、创建env环境

#virtual及redis服务端需要提前安装好
virtualenv /home/DjangoCelery2
source /home/DjangoCelery2/bin/activate
cd /home/DjangoCelery2/

二、安装软件

pip install celery django-celery-results Django redis

安装成功

三、创建Django

#/home/DjangoCelery2/
django-admin startproject myplatform
cd myplatform
python3 manage.py startapp apps
tree /home/DjangoCelery2/myplatform/
#目录结构
/home/DjangoCelery2/myplatform/
├── apps
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
└── myplatform
    ├── __init__.py
    ├── __pycache__
    │   ├── __init__.cpython-36.pyc
    │   └── settings.cpython-36.pyc
    ├── settings.py
    ├── urls.py
    └── wsgi.py

配置django

  1. 配置apps/views.py文件
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
    return HttpResponse('hello django')
  1. 创建apps/urls.py
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index,name='index'),
]
  1. 配置myplatform/urls.py文件
from django.contrib import admin
#导入include
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('apps',include('apps.urls'))
]
  1. 配置myplatform/setting.py文件
#默认为空,加入允许对外访问的IP
ALLOWED_HOSTS = ['192.168.1.204']

运行django

python3 manage.py runserver 192.168.1.204:8000

访问测试

http://192.168.1.204:8000/apps
#页面显示hello django即可

四、配置异步处理

  1. 创建myplatform/celery.py文件
from __future__ import absolute_import, unicode_literals   #这句导入一定要在第一的位置
import os
from celery import Celery
from django.conf import settings

#这里我们的项目名称为,所以为platform.settings
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myplatform.settings")

# 创建celery应用
app = Celery('dailyblog')
#doesn’t have to serialize the object.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
  1. 配置myplatform/setting.py文件
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_celery_results',#添加此项
]
....
#CELERY
BROKER_BACKEND = 'redis'
BROKER_URL = 'redis://localhost'
CELERY_RESULT_BACKEND = 'redis://localhost' #使用database作为结果存储
  1. 配置__init__.py文件(myplatform项目目录)
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ('celery_app',)
  1. 创建apps/tasks.py文件
from myplatform import celery_app as app
import time
@app.task
def func():
    time.sleep(6)
    return 2+3
  1. 配置apps/views.py文件
from django.shortcuts import render
#导入func函数
from .tasks import func
from django.http import HttpResponse
# Create your views here.


def index(request):
    print('start index')
    #调用func
    func.delay()
    print('end index')
    return HttpResponse('hello django')
  1. 重新启动Django
python3 manage.py runserver 192.168.1.204:8000
  1. 启动celery
cd /home/DjangoCelery2/myplatform
celery -A myplatform worker -l INFO

8. 测试

http://192.168.1.204:8000/apps

9. 目录结构

#pyc文件可忽略
myplatform/
├── apps
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── tasks.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── views.cpython-36.pyc
│   ├── tasks.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── db.sqlite3
├── manage.py
└── myplatform
    ├── celery.py
    ├── __init__.py
    ├── __pycache__
    │   ├── celery.cpython-36.pyc
    │   ├── __init__.cpython-36.pyc
    │   ├── settings.cpython-36.pyc
    │   ├── urls.cpython-36.pyc
    │   └── wsgi.cpython-36.pyc
    ├── settings.py
    ├── urls.py
    └── wsgi.py

  1. github地址

下载地址

五、配置flower监控

  1. 安装flower
pip install flower
  1. 启动flower
#指定对外访问IP及redis为broker
#celery flower --address=192.168.1.204 --broker='redis://localhost'
#basic_auth开启认证
celery flower --address=192.168.1.204 --broker='redis://localhost' --basic_auth=admin:123456
  1. 浏览监控页面
http://192.168.1.204:5555/