django框架如何集成celery进行开发


Posted in Python onMay 24, 2017

上一篇已经介绍了celery的基本知识,本篇以一个小项目为例,详细说明django框架如何集成celery进行开发。

本系列文章的开发环境:

window 7 + python2.7 + pycharm5 + celery3.1.25 + django1.9.4
一、项目功能

      在web应用中,用户触发一个操作,执行后台处理程序,这个程序需要执行很长时间才能返回结果。怎样才能不阻塞http请求,不让用户等待从而提高用户体验呢?这是本例需要解决的问题。具体设计是:用两个网页进行展示,一个网页是提交加法计算任务到后台进行计算;另外一个网页查看所有计算任务的详细情况,如任务ID,任务状态等。

就如下图所示:输入:http://127.0.0.1:8000/index/

django框架如何集成celery进行开发

点击查看任务链接,查看所有任务的执行情况:sucess表示执行成功,started表示已经开始执行了。

    django框架如何集成celery进行开发

二、项目结构

    Broker我这里选择RabbitMQ,结果存储Backend我选择django-celery。

    django框架如何集成celery进行开发

三、开始编程

   1、安装django-celery:  

$ pip install django-celery

   2、新建django工程项目test_celery,如下:

        django框架如何集成celery进行开发

【说明】:tools是django包,和test_celery是同级目录,该包功能主要存放工具类函数和执行的任务;

              celery.py:celery配置文件信息

 3、编辑setting.py,添加配置celery broker和backend

#celery setting
import djcelery
djcelery.setup_loader()  #加载djcelery
BROKER_URL = 'pyamqp://guest@localhost//' #配置broker
BROKER_POOL_LIMIT = 0
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend' #配置backend

INSTALLED_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_import
import os
from 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 # noqa

app = 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_import
from celery import shared_task
import time

@shared_task(track_started=True)
def add(x, y):
 time.sleep(30) #模拟长时间执行
 return x + y
6、创建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_celery
python manage.py migrate

到这里会在数据库中生成以下表:

django框架如何集成celery进行开发

8、接下来编写前端html文件以及view文件,具体请自己编写或者下载源码运行。

9、编码完成后,启动worker,然后就可以在网页上进行模拟操作了 

    进入test_celery项目目录下,也就是有manage.py文件那一层,执行以下命令启动worker:

celery worker -A test_celery -l info
10、在浏览器中,http://127.0.0.1:8000/index/,录入第一个加数和第二个加数,点击计算,就交给后台tasks执行了,这时可以点击查看任务进行查看。 
Python 相关文章推荐
Python脚本实现下载合并SAE日志
Feb 10 Python
Python切片知识解析
Mar 06 Python
Python图算法实例分析
Aug 13 Python
python中的随机函数random的用法示例
Jan 27 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
使用Python进行目录的对比方法
Nov 01 Python
Python基于Tkinter模块实现的弹球小游戏
Dec 27 Python
Django Admin中增加导出CSV功能过程解析
Sep 04 Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
python中类与对象之间的关系详解
Dec 16 Python
python 计算两个日期相差多少个月实例代码
May 24 #Python
django基础之数据库操作方法(详解)
May 24 #Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 #Python
Python生成密码库功能示例
May 23 #Python
Python计算两个日期相差天数的方法示例
May 23 #Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 #Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 #Python
You might like
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
jQuery实现带动画效果的多级下拉菜单代码
2015/09/08 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
基于JQuery的Ajax方法使用详解
2017/08/16 jQuery
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
Python中的多行注释文档编写风格汇总
2016/06/16 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
Clarks鞋美国官网:全球领军鞋履品牌
2017/05/13 全球购物
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
党支部书记岗位责任制
2014/02/11 职场文书
2014年健康教育实施方案
2014/02/17 职场文书
结婚老公保证书
2015/02/26 职场文书
年底个人总结范文
2015/03/10 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
公司老总年会致辞
2015/07/30 职场文书
护士旷工检讨书
2015/08/15 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python