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提取页面内url列表的方法
May 25 Python
python中nan与inf转为特定数字方法示例
May 11 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
基于Python列表解析(列表推导式)
Jun 23 Python
python中单例常用的几种实现方法总结
Oct 13 Python
基于Python实现定时自动给微信好友发送天气预报
Oct 25 Python
django的ORM模型的实现原理
Mar 04 Python
python是否适合网页编程详解
Oct 04 Python
python安装本地whl的实例步骤
Oct 12 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 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数据库的php代码(一个表一个文件)
2010/05/28 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
2013/01/13 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
2014/09/01 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
2015/02/28 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
VueCli3构建TS项目的方法步骤
2018/11/07 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
Python入门篇之面向对象
2014/10/20 Python
Python抓取淘宝下拉框关键词的方法
2015/07/08 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
python 制作简单的音乐播放器
2020/11/25 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
专业销售业务员求职信
2013/11/18 职场文书
高中生的自我鉴定范文
2014/01/24 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
企业委托书范本
2014/09/13 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
学校中秋节活动总结
2015/03/23 职场文书