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基于回溯法子集树模板解决找零问题示例
Sep 11 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
python散点图实例之随机漫步
Aug 27 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
Python使用python-docx读写word文档
Aug 26 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
Oct 30 Python
python爬虫爬取笔趣网小说网站过程图解
Nov 18 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
python怎么自定义捕获错误
Jun 29 Python
opencv 图像加法与图像融合的实现代码
Jul 08 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 Python
python打包生成so文件的实现
Oct 30 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 图片上添加透明度渐变的效果
2009/06/29 PHP
PHP文件上传原理简单分析
2011/05/29 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
ExtJS4 动态生成的grid导出为excel示例
2014/05/02 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
AngularJs+Bootstrap实现漂亮的计算器
2017/08/10 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
python多重继承实例
2014/10/11 Python
对于Python中线程问题的简单讲解
2015/04/03 Python
Django自定义分页效果
2017/06/27 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
python实现七段数码管和倒计时效果
2019/11/23 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
Booking.com亚太地区:Booking.com APAC
2020/02/07 全球购物
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
《尊严》教学反思
2014/02/11 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
公司租车协议书
2015/01/29 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL
Java死锁的排查
2022/05/11 Java/Android