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使用ntplib库同步校准当地时间的方法
Jul 02 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
Oct 20 Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 Python
PyQt5实现简易电子词典
Jun 25 Python
python numpy数组复制使用实例解析
Jan 10 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 Python
pytorch加载自己的图像数据集实例
Jul 07 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
解决python3中os.popen()出错的问题
Nov 19 Python
python字典按照value排序方法
Dec 28 Python
python识别围棋定位棋盘位置
Jul 26 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自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
Bootstarp 基础教程之表单部分实例代码
2017/02/03 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
Vue.js 十五分钟入门图文教程
2018/09/12 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
Python的Django框架中的数据过滤功能
2015/07/17 Python
Python内置函数OCT详解
2016/11/09 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
python可迭代对象去重实例
2020/05/15 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
css3高级选择器使用方法
2013/12/02 HTML / CSS
机修工岗位职责
2013/11/24 职场文书
生物科学专业个人求职信范文
2013/12/05 职场文书
实习鉴定范文
2013/12/19 职场文书
蛋糕店的商业计划书范文
2014/01/27 职场文书
聘用意向书范本
2014/04/01 职场文书
六一节目主持词
2014/04/01 职场文书
会计个人实习计划书
2014/08/15 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
审查起诉阶段律师意见书
2015/05/19 职场文书
学生检讨书范文
2019/06/24 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
SQLServer中JSON文档型数据的查询问题解决
2021/06/27 SQL Server
nginx安装以及配置的详细过程记录
2021/09/15 Servers
MySQL实现配置主从复制项目实践
2022/03/31 MySQL