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版的文曲星猜数字游戏代码
Sep 02 Python
python处理json数据中的中文
Mar 06 Python
使用Python编写一个简单的tic-tac-toe游戏的教程
Apr 16 Python
Python import用法以及与from...import的区别
May 28 Python
python获取局域网占带宽最大3个ip的方法
Jul 09 Python
Python中的字符串类型基本知识学习教程
Feb 04 Python
Python编程pygal绘图实例之XY线
Dec 09 Python
python pandas修改列属性的方法详解
Jun 09 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
浅谈python的深浅拷贝以及fromkeys的用法
Mar 08 Python
Python内置函数property()如何使用
Sep 01 Python
如何利用python实现Simhash算法
Jun 28 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
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
变量在 PHP7 内部的实现(二)
2015/12/21 PHP
PHP模板引擎Smarty中变量的使用方法示例
2016/04/11 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
微信小程序自定义模态对话框实例详解
2017/08/16 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
原生小程序封装跑马灯效果
2020/10/21 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
简单谈谈Python中的几种常见的数据类型
2017/02/10 Python
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
python实现月食效果实例代码
2019/06/18 Python
Python flask框架post接口调用示例
2019/07/03 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
Python基于BeautifulSoup爬取京东商品信息
2020/06/01 Python
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
机修工岗位职责
2013/11/24 职场文书
初中生期末考试的自我评价
2013/12/17 职场文书
给领导的致歉信范文
2014/01/13 职场文书
宣传普通话标语
2014/06/27 职场文书
师范生见习报告范文
2014/11/03 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server