Celery 在Django中简单实例

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('

测试celery 在Django中应用!

')
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///',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

你可能感兴趣的:(Celery 在Django中简单实例)