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爬虫神器Beautiful Soup用法
Jan 20 Python
浅谈python装饰器探究与参数的领取
Dec 01 Python
python数据分析数据标准化及离散化详解
Feb 26 Python
python编程使用协程并发的优缺点
Sep 20 Python
Python数据类型之列表和元组的方法实例详解
Jul 08 Python
Python实现基于SVM的分类器的方法
Jul 19 Python
python hashlib加密实现代码
Oct 17 Python
Pytorch 数据加载与数据预处理方式
Dec 31 Python
pandas to_excel 添加颜色操作
Jul 14 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
Sep 21 Python
python搜索算法原理及实例讲解
Nov 18 Python
利用python调用摄像头的实例分析
Jun 07 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中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
php截取字符串函数分享
2015/02/02 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
各种效果的jquery ui(接口)介绍
2008/09/17 Javascript
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
script标签的 charset 属性使用说明
2010/12/04 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
浅谈 javascript 事件处理
2015/01/04 Javascript
javascript计时器详解
2015/02/28 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
NodeJS创建基础应用并应用模板引擎
2016/04/12 NodeJs
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
[01:08:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS LGD-CDEC
2014/05/22 DOTA
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
Python实现二分法算法实例
2015/02/02 Python
python 正确保留多位小数的实例
2018/07/16 Python
Python中按键来获取指定的值
2019/03/02 Python
Python目录和文件处理总结详解
2019/09/02 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
美丽的现代设计家具:2Modern
2018/07/26 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
食品委托检验协议书范本
2014/09/12 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书