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开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
Jul 27 Python
Python random模块用法解析及简单示例
Dec 18 Python
Python数据拟合与广义线性回归算法学习
Dec 22 Python
python模块smtplib学习
May 22 Python
小白入门篇使用Python搭建点击率预估模型
Oct 12 Python
python给微信好友定时推送消息的示例
Feb 20 Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 Python
django中media媒体路径设置的步骤
Nov 15 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
在Python 的线程中运行协程的方法
Feb 24 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
python 写一个性能测试工具(一)
Oct 24 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对象类型判断
2008/08/27 PHP
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
thinkphp特殊标签用法概述
2014/11/24 PHP
PHP也能干大事之PHP中的编码解码详解
2015/04/20 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
php微信开发之百度天气预报
2016/11/18 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
2015/08/07 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
python实现文件分组复制到不同目录的例子
2014/06/04 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
django foreignkey外键使用的例子 相当于left join
2019/08/06 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
运动会开幕式解说词
2014/02/05 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
销售开票员岗位职责
2015/04/15 职场文书
小学生暑假生活总结
2015/07/13 职场文书
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL