一、创建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
- 配置apps/views.py文件
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse('hello django')
复制代码
- 创建apps/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index,name='index'),
]
复制代码
- 配置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'))
]
复制代码
- 配置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即可
复制代码
四、配置异步处理
- 创建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)
复制代码
- 配置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作为结果存储
复制代码
- 配置__init__.py文件(myplatform项目目录)
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ('celery_app',)
复制代码
- 创建apps/tasks.py文件
from myplatform import celery_app as app
import time
@app.task
def func():
time.sleep(6)
return 2+3
复制代码
- 配置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')
复制代码
- 重新启动Django
python3 manage.py runserver 192.168.1.204:8000
复制代码
- 启动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
复制代码
- github地址
五、配置flower监控
- 安装flower
pip install flower
复制代码
- 启动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
复制代码
- 浏览监控页面
http://192.168.1.204:5555/
复制代码