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中各种方法的运作原理
Jun 15 Python
python生成IP段的方法
Jul 07 Python
Python管理Windows服务小脚本
Mar 12 Python
python+selenium 点击单选框-radio的实现方法
Sep 03 Python
Python面向对象原理与基础语法详解
Jan 02 Python
深入浅析Python 命令行模块 Click
Mar 11 Python
python将音频进行变速的操作方法
Apr 08 Python
Python分析最近大火的网剧《隐秘的角落》
Jul 02 Python
Django-simple-captcha验证码包使用方法详解
Nov 28 Python
使用BeautifulSoup4解析XML的方法小结
Dec 07 Python
python基于tkinter制作下班倒计时工具
Apr 28 Python
Python爬虫基础之初次使用scrapy爬虫实例
Jun 26 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/03 咖啡文化
PHP中显示格式化的用户输入
2006/10/09 PHP
PHP 透明水印生成代码
2012/08/27 PHP
PHP中的闭包(匿名函数)浅析
2015/02/07 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
一些实用的jQuery代码片段收集
2011/07/12 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
js星星评分效果
2014/07/24 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
jQuery实现购物车表单自动结算效果实例
2015/08/10 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
微信小程序 chooseImage选择图片或者拍照
2017/04/07 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
浅谈python配置与使用OpenCV踩的一些坑
2018/04/02 Python
Python3.5常见内置方法参数用法实例详解
2019/04/29 Python
简单了解python协程的相关知识
2019/08/31 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
深入浅析HTML5中的SVG
2015/11/27 HTML / CSS
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
高级方案规划工程师岗位职责
2013/11/29 职场文书
咖啡店自主创业商业计划书
2014/01/22 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
竞选生活委员演讲稿
2014/04/28 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
秋季运动会加油词
2015/07/18 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle