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切换hosts文件代码示例
Dec 31 Python
Python实现partial改变方法默认参数
Aug 18 Python
Python编写百度贴吧的简单爬虫
Apr 02 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
python查找指定文件夹下所有文件并按修改时间倒序排列的方法
Oct 21 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
django的model操作汇整详解
Jul 26 Python
PyTorch中Tensor的拼接与拆分的实现
Aug 18 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 Python
NumPy统计函数的实现方法
Jan 21 Python
使用Python将图片转正方形的两种方法实例代码详解
Apr 29 Python
Python编写冷笑话生成器
Apr 20 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
一个用于网络的工具函数库
2006/10/09 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
JS backgroundImage控制
2009/05/19 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
jQuery实现Twitter的自动文字补齐特效
2014/11/28 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
BootstrapValidator不触发校验的实现代码
2016/09/28 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
2016/12/26 Javascript
Angular排序实例详解
2017/06/28 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
Python的randrange()方法使用教程
2015/05/15 Python
python基础教程项目二之画幅好画
2018/04/02 Python
python中的常量和变量代码详解
2018/07/25 Python
python爬取网易云音乐评论
2018/11/16 Python
Python如何重新加载模块
2020/07/29 Python
python自动生成sql语句的脚本
2021/02/24 Python
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
《胖乎乎的小手》教学反思
2014/02/26 职场文书
大四毕业生自荐书
2014/07/05 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
2015国庆节宣传语
2015/07/14 职场文书
文明礼貌主题班会
2015/08/14 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python
搭建Yolov5服务器
2022/04/30 Servers