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中字典和JSON互转操作实例
Jan 19 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
django实现用户注册实例讲解
Oct 30 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
Jan 09 Python
python实现tail -f 功能
Jan 17 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
Feb 21 Python
解决pycharm安装第三方库失败的问题
May 09 Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 Python
python接口自动化之ConfigParser配置文件的使用详解
Aug 03 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
mysql 字段类型说明
2007/04/27 PHP
逐步提升php框架的性能
2008/01/10 PHP
PHP详细彻底学习Smarty
2008/03/27 PHP
php 删除cookie方法详解
2014/12/01 PHP
PHP 绘制网站登录首页图片验证码
2016/04/12 PHP
YII框架关联查询操作示例
2019/04/29 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
AngularJS中filter的使用实例详解
2017/08/25 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
javascript实现获取中文汉字拼音首字母
2020/05/19 Javascript
基于javascript的无缝滚动动画实现2
2020/08/07 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
用Python编写一个国际象棋AI程序
2014/11/28 Python
python的keyword模块用法实例分析
2015/06/30 Python
Django中URLconf和include()的协同工作方法
2015/07/20 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
python plotly画柱状图代码实例
2019/12/13 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
物业电工岗位职责
2013/11/20 职场文书
党日活动总结
2014/05/07 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
教你怎么用Python生成九宫格照片
2021/05/20 Python