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模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 Python
让python同时兼容python2和python3的8个技巧分享
Jul 11 Python
Python使用CMD模块更优雅的运行脚本
May 11 Python
python脚本内运行linux命令的方法
Jul 02 Python
Python基于回溯法子集树模板实现8皇后问题
Sep 01 Python
Python网络编程 Python套接字编程
Sep 13 Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 Python
如何解决tensorflow恢复模型的特定值时出错
Feb 06 Python
Python基础类继承重写实现原理解析
Apr 03 Python
解决python父线程关闭后子线程不关闭问题
Apr 25 Python
Python中用xlwt制作表格实例讲解
Nov 05 Python
python办公自动化之excel的操作
May 23 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
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
JS全角与半角转化实例(分享)
2017/07/04 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
Python循环语句中else的用法总结
2016/09/11 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python如何制作缩略图
2019/04/30 Python
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
linux比较文件内容的命令是什么
2013/03/04 面试题
数控技术专科生自我评价
2014/01/08 职场文书
电脑饰品店的创业计划书
2014/01/21 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
英语课前三分钟演讲稿
2014/08/19 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
大学生个人总结范文
2015/02/15 职场文书
远程教育学习心得体会
2016/01/23 职场文书