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访问类中docstring注释的实现方法
May 04 Python
python实现带声音的摩斯码翻译实现方法
May 20 Python
详解django三种文件下载方式
Apr 06 Python
win7下python3.6安装配置方法图文教程
Jul 31 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
Jan 06 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
Python scrapy爬取小说代码案例详解
Jul 09 Python
Python extract及contains方法代码实例
Sep 11 Python
Python grpc超时机制代码示例
Sep 14 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可逆加密/解密函数分享
2012/09/25 PHP
php代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
javascript 冒号 使用说明
2009/06/06 Javascript
Mootools 1.2教程 事件处理
2009/09/15 Javascript
Javascript UrlDecode函数代码
2010/01/09 Javascript
jquery CSS选择器笔记
2010/03/29 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
2013/11/06 Javascript
jquery ajax修改全局变量示例代码
2013/11/08 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
python常用函数详解
2016/09/13 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
Python imread、newaxis用法详解
2019/11/04 Python
django修改models重建数据库的操作
2020/03/31 Python
如何理解python对象
2020/06/21 Python
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
Python文件操作的面试题
2013/06/22 面试题
员工薪酬福利制度
2014/01/17 职场文书
大学校庆策划书
2014/01/31 职场文书
超市开店计划书
2014/09/15 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
导游词之任弼时故居
2020/01/07 职场文书
Nginx配置https原理及实现过程详解
2021/03/31 Servers
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
Golang ort 中的sortInts 方法
2022/04/24 Golang