django中使用Celery 布式任务队列过程详解


Posted in Python onJuly 29, 2019

本文记录django中如何使用celery完成异步任务。

Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。

它是一个专注于实时处理的任务队列,同时也支持任务调度。

官方网站

中文文档

示例一:用户发起request,并等待response返回。在本些views中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验

示例二:网站每小时需要同步一次天气预报信息,但是http是请求触发的,难道要一小时请求一次吗?

使用celery后,情况就不一样了

示例一的解决:将耗时的程序放到celery中执行

示例二的解决:使用celery定时执行

名词

任务task:就是一个Python函数

队列queue:将需要执行的任务加入到队列中

工人worker:在一个新进程中,负责执行队列中的任务

代理人broker:负责调度,在布置环境中使用redis

本示例在ubuntu系统中,使用django1.8.2,并且要安装redis

1,首先需要安装扩展包。

pip install celery==3.1.25
pip install celery-with-redis==3.0
pip install django-celery==3.1.17

2,配置项目setting.py

加入以下代码:

import djcelery
djcelery.setup_loader()
BROKER_URL = 'redis://127.0.0.1:6379/0'
CELERY_IMPORTS = ('bookstory.task')

CELERY_IMPORTS值是异步任务函数所在的位置,比如这个是bookstory应用里面的task.py文件里,如图:

django中使用Celery 布式任务队列过程详解

并且将'djcelery'加入到setting.py的INSTALLED_APPS里面。

3,编写需要异步执行(或者耗时)的功能函数

编写task.py文件,假设我就这样模拟耗时操作

# coding=utf-8

import time
from celery import task


@task
def showa():
  # 任务函数
  print('hello....')
  time.sleep(5)
  print('world....')

4,迁移,生成celery需要的数据表

python manage.py migrate

5,启动worker

python manage.py celery worker --loglevel=info

6,使用

新建一个视图函数,并且分配一个url

from task import *

.........

# celery异步
def showTest(request):
  showa.delay()
  return HttpResponse('哈哈哈')

调用语法就是:

function.delay(parameters)

function就是task里写的函数,parameters就是这个函数要传递的参数,我的showa没有传参数,所以就直接showa.delay()就可以调用了。

运行结果就是在浏览器中并没有等待5秒,而是直接输出'哈哈'了。并没有因为耗时的操作二延迟。在启动worker的窗口里面可以看到hello,world间隔5秒分别输出了出来:

django中使用Celery 布式任务队列过程详解

按照步骤来,其实并不难,具体异步(耗时)操作根据具体业务在task里面具体编写就ok了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
举例详解Python中yield生成器的用法
Aug 05 Python
python脚本实现xls(xlsx)转成csv
Apr 10 Python
深入理解Python变量与常量
Jun 02 Python
python中redis的安装和使用
Dec 04 Python
Python set常用操作函数集锦
Nov 15 Python
python3 实现对图片进行局部切割的方法
Dec 05 Python
py-charm延长试用期限实例
Dec 22 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
python多进程下的生产者和消费者模型
May 07 Python
python中selenium库的基本使用详解
Jul 31 Python
Python scrapy爬取起点中文网小说榜单
Jun 13 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 Python
详解python中自定义超时异常的几种方法
Jul 29 #Python
Python 离线工作环境搭建的方法步骤
Jul 29 #Python
如何通过python的fabric包完成代码上传部署
Jul 29 #Python
Python八皇后问题解答过程详解
Jul 29 #Python
python 标准差计算的实现(std)
Jul 29 #Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 #Python
Python完成哈夫曼树编码过程及原理详解
Jul 29 #Python
You might like
一个很不错的PHP翻页类
2009/06/01 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
js 小数取整的函数
2010/05/10 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
js的Boolean对象初始值示例
2014/03/04 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
微信小程序之滚动视图容器的实现方法
2017/09/26 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
Python中的自省(反射)详解
2015/06/02 Python
Python表示矩阵的方法分析
2017/05/26 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
在python里从协程返回一个值的示例
2019/02/19 Python
canvas 橡皮筋式线条绘图应用方法
2019/02/13 HTML / CSS
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
饿了么订餐官网:外卖、网上订餐
2019/06/28 全球购物
职称评定自我鉴定
2014/03/18 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
学生保证书范文
2014/04/28 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
优秀班主任申报材料
2014/12/16 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
2016年基层党支部书记公开承诺书
2016/03/25 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
Python超详细分步解析随机漫步
2022/03/17 Python
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server