Python Celery异步任务队列使用方法解析


Posted in Python onAugust 10, 2020

Celery是一个异步的任务队列(也叫做分布式任务队列),一个简单,灵活,可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需要的工具。

celery的优点

1:简单,容易使用,不需要配置文件

2:高可用,任务执行失败或执行过程中发生连续中断,celery会自动尝试重新执行任务

3:快速,一个单进程的celery每分钟可以处理上百万个任务

4:灵活,几乎celery的各个组件都可以被扩展

celery应用场景

1:异步发邮件,一般发邮件等比较耗时的操作,这个时候需要提交任务给celery就可以了,由worker进行发邮件操作

2:有些跑批量接口任务,需要耗时较长,也可以做成异步任务

3:定时调度任务

Celery与Django一起使用(以发送短信为例)

独立于项目新建一个package包

在package包中新建一个名为sms的package包

新建tasks.py文件

#定义耗时的函数
from utils.ytx_sdk.sendSMS import CCP
from celery_tasks.main import app

#为函数添加装饰器,这个函数就成为了celery的任务
@app.task
def send_sms_code(mobile,code,expires,template_id):
  try:
    # CCP.sendTemplateSMS(mobile,code,expires,template_id)
    print(code)
  except:
    return '发送短信失败'

在package包中新建config.py

内容如下(中间人,接收生产者发来的消息即Task,将任务存入队列。任务的消费者是Worker。Celery本身不提供队列服务,推荐用Redis或RabbitMQ实现队列服务。)

#指定代理人队列==>redis
broker_url='redis://127.0.0.1:6379/15'

在package包中新建main.py

内容如下(需要将task注册到celery应用中)

#启动工人的文件
from celery import Celery
# 为celery使用django配置文件进行设置
import os
if not os.getenv('DJANGO_SETTINGS_MODULE'):
  os.environ['DJANGO_SETTINGS_MODULE'] = 'yinyue.settings.dev'
# 创建celery应用
app = Celery('yinyue')
# 导入celery配置
app.config_from_object('celery_tasks.config')
# 自动注册celery任务
app.autodiscover_tasks([
  'celery_tasks.sms'
])

在django框架对应模块的视图中使用

#调用celery的任务:任务名.delay(参数)
send_sms_code.delay(mobile,code,constants.SMS_CODE_EXPIRES/60,1)

启动celery服务: celery -A celery_tasks.main worker -l info

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

Python 相关文章推荐
python进阶教程之异常处理
Aug 30 Python
跟老齐学Python之正规地说一句话
Sep 28 Python
Python浅拷贝与深拷贝用法实例
May 09 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
python如何查看系统网络流量的信息
Sep 12 Python
python 基础教程之Map使用方法
Jan 17 Python
Python语言的变量认识及操作方法
Feb 11 Python
使用matplotlib画散点图的方法
May 25 Python
TensorFlow数据输入的方法示例
Jun 19 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
如何基于线程池提升request模块效率
Apr 18 Python
python如何读取.mtx文件
Apr 22 Python
使用Python将语音转换为文本的方法
Aug 10 #Python
Python获取excel内容及相关操作代码实例
Aug 10 #Python
Python利用命名空间解析XML文档
Aug 10 #Python
Python如何定义有默认参数的函数
Aug 10 #Python
如何更换python默认编辑器的背景色
Aug 10 #Python
django前端页面下拉选择框默认值设置方式
Aug 09 #Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 #Python
You might like
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
python对url格式解析的方法
2015/05/13 Python
Fiddler如何抓取手机APP数据包
2016/01/22 Python
python使用标准库根据进程名如何获取进程的pid详解
2017/10/31 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
python安装numpy和pandas的方法步骤
2019/05/27 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
乔迁之喜主持词
2014/03/27 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
学生打架检讨书
2014/10/20 职场文书
2014年体育教师工作总结
2014/12/03 职场文书