上一篇已经介绍了celery的基本知识,本篇以一个小项目为例,详细说明django框架如何集成celery进行开发。
本系列文章的开发环境:
window 7 + python2.7 + pycharm5 + celery3.1.25 + django1.9.4一、项目功能
在web应用中,用户触发一个 *** 作,执行后台处理程序,这个程序需要执行很长时间才能返回结果。怎样才能不阻塞http请求,不让用户等待从而提高用户体验呢?这是本例需要解决的问题。具体设计是:用两个网页进行展示,一个网页是提交加法计算任务到后台进行计算;另外一个网页查看所有计算任务的详细情况,如任务ID,任务状态等。
就如下图所示:输入:http://127.0.0.1:8000/index/
点击查看任务链接,查看所有任务的执行情况:sucess表示执行成功,started表示已经开始执行了。
二、项目结构
broker我这里选择RabbitMQ,结果存储Backend我选择django-celery。
三、开始编程
1、安装django-celery:
$ pip install django-celery
2、新建django工程项目test_celery,如下:
【说明】:tools是django包,和test_celery是同级目录,该包功能主要存放工具类函数和执行的任务;
celery.py:celery配置文件信息
3、编辑setting.py,添加配置celery broker和backend
#celery settingimport djcelerydjcelery.setup_loader() #加载djcelerybroKER_URL = 'pyamqp://guest@localhost//' #配置brokerbroKER_POol_liMIT = 0CELERY_RESulT_BACKEND='djcelery.backends.database:DatabaseBackend' #配置backendINSTALLED_APPS = [ 'django.contrib.admin','django.contrib.auth','django.contrib.ContentTypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','djcelery',#django-celery必须添加 'test_celery',]DATABASES = { 'default': { 'ENGINE': 'django.db.backends.MysqL','name': 'celery','USER':'username','PASSWORD':'password','HOST':'ip','PORT':3306,}}4、新建celery.py文件,添加如下内容:
from __future__ import absolute_importimport osfrom celery import Celery# set the default Django settings module for the 'celery' program.os.environ.setdefault('DJANGO_SETTINGS_MODulE','test_celery.settings')from django.conf import settings # noqaapp = Celery('test_celery')# 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)@app.task(bind=True)def deBUG_task(self): print('Request: {0!r}'.format(self.request))5、新建tasks.py文件,创建任务
from __future__ import absolute_importfrom celery import shared_taskimport time@shared_task(track_started=True)def add(x,y): time.sleep(30) #模拟长时间执行 return x + y6、创建model.py,新建存储任务信息的表:
from django.db import models#在数据库中生成test_celery_add表class Add(models.Model): task_ID = models.CharFIEld(max_length=128) #存储taskID first = models.IntegerFIEld() #存储第一个加数 second = models.IntegerFIEld() #存储第二个加数 log_date = models.DateTimeFIEld() #存储开始时间7、进入test_celery目录下,有manage.py那一层,执行:
python manage.py makemigrations test_celerypython manage.py migrate
到这里会在数据库中生成以下表:
8、接下来编写前端HTML文件以及vIEw文件,具体请自己编写或者下载源码运行。
9、编码完成后,启动worker,然后就可以在网页上进行模拟 *** 作了
进入test_celery项目目录下,也就是有manage.py文件那一层,执行以下命令启动worker:
celery worker -A test_celery -l info10、在浏览器中,http://127.0.0.1:8000/index/,录入第一个加数和第二个加数,点击计算,就交给后台tasks执行了,这时可以点击查看任务进行查看。
项目源代码下载
总结以上是内存溢出为你收集整理的django框架如何集成celery进行开发全部内容,希望文章能够帮你解决django框架如何集成celery进行开发所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)