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 Mysql自动备份脚本
Jul 14 Python
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
Apr 09 Python
java直接调用python脚本的例子
Feb 16 Python
Python struct模块解析
Jun 12 Python
Python在Console下显示文本进度条的方法
Feb 14 Python
python 读写中文json的实例详解
Oct 29 Python
Python栈算法的实现与简单应用示例
Nov 01 Python
Python+树莓派+YOLO打造一款人工智能照相机
Jan 02 Python
pycharm显示远程图片的实现
Nov 04 Python
OpenCV Python实现拼图小游戏
Mar 23 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
python中urllib.request和requests的使用及区别详解
May 05 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 冲泡冲煮
建立文件交换功能的脚本(一)
2006/10/09 PHP
php 生成饼图 三维饼图
2009/09/28 PHP
php 邮件发送问题解决
2014/03/22 PHP
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
python搜索指定目录的方法
2015/04/29 Python
Python中条件判断语句的简单使用方法
2015/08/21 Python
基python实现多线程网页爬虫
2015/09/06 Python
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
keras读取训练好的模型参数并把参数赋值给其它模型详解
2020/06/15 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
Python try except finally资源回收的实现
2021/01/25 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
Gap工厂店:Gap Factory
2017/11/02 全球购物
最新茶叶店创业计划书
2014/01/14 职场文书
法制宣传教育方案
2014/05/09 职场文书
学年个人总结范文
2015/03/05 职场文书
《所见》教学反思
2016/02/23 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python