1,新建Django项目。
django-admin startproject proj
2,进入目录。
cd proj
3,新建应用。
python manage.py startapp app
3,新建app/tasks.py文件。
定义一个耗时任务,两数字相加,延迟五秒给结果。
#coding:utf-8
from proj import celery_app
import time
@celery_app.task
def add(x,y):
print(x+y)
time.sleep(5)
return x+y
Image text
3,编辑app/views.py文件。
from django.shortcuts import render
# Create your views here.
from django.http import HttpResponse
from .tasks import add
def ad(requests,x,y):
re=add.delay(x,y)
r=re.get()
return HttpResponse(str(r))
def home(request):
return HttpResponse('<center><h1>测试celery 在Django中应用!</center></h1>')
Image text
4, setting.py.
#celery settings
#celery中间人 redis://redis服务所在的ip地址:端口/数据库号
BROKER_URL = 'redis://localhost:6379/0'
#celery结果返回,可用于跟踪结果
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
#celery内容等消息的格式设置
CELERY_ACCEPT_CONTENT = ['application/json',]
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
from kombu import serialization
serialization.registry._decoders.pop("application/x-python-serialize")
#celery时区设置,使用settings中TIME_ZONE同样的时区
CELERY_TIMEZONE = TIME_ZONE
Image text
5,url.py
from django.contrib import admin
from django.urls import path
from app.views import home, ad
urlpatterns = [
path('admin/', admin.site.urls),
path('',home),
path(r'add/<int:x>/<int:y>/',ad,),
]
Image text
6,proj/init.py
#coding:utf-8
from __future__ import absolute_import, unicode_literals
#引入celery实例对象
from .celery import app as celery_app
Image text
7,新建文件proj/celery.py。
proj/celery.py
from __future__ import absolute_import, unicode_literals
from celery import Celery
from django.conf import settings
import os
#获取当前文件夹名,即为该Django的项目名
project_name = os.path.split(os.path.abspath('.'))[-1]
project_settings = '%s.settings' % project_name
#设置环境变量
os.environ.setdefault('DJANGO_SETTINGS_MODULE', project_settings)
#实例化Celery
app = Celery(project_name)
#使用django的settings文件配置celery
app.config_from_object('django.conf:settings')
#Celery加载所有注册的应用
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
Image text
8,启动redis.
redis-server /usr/local/redis-5.0.4/etc/redis.conf
9,启动celery。
Celery -A proj worker -l info
Image text
这个警告大概是想说debug为True时会产生内存泄漏吧
10,启动Django项目。
python manage.py runserver
Image text
11,测试效果。
Image text
Image text
Image text
9,应用djcelery。
a,安装djcelery。
pip install django-celery
b, 编辑setting.py。
import djcelery
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app',
'djcelery',
]
c,生成需要的表。
python3 manage.py migrate
d,启动celery。
python manage.py celery -A proj worker -l info
Image text










网友评论