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实现通过代理服务器访问远程url的方法
Apr 29 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 Python
Python基础篇之初识Python必看攻略
Jun 23 Python
基于Python实现的微信好友数据分析
Feb 26 Python
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 Python
Python实现的爬取百度文库功能示例
Feb 16 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
python读写配置文件操作示例
Jul 03 Python
Python使用get_text()方法从大段html中提取文本的实例
Aug 27 Python
Python3实现二叉树的最大深度
Sep 30 Python
基于python实现数组格式参数加密计算
Apr 21 Python
Python集合的基础操作
Nov 01 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的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
jsonp原理及使用
2013/10/28 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
knockoutjs动态加载外部的file作为component中的template数据源的实现方法
2016/09/01 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
详解vue express启动数据服务
2017/07/05 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
怎样使你的 JavaScript 代码简单易读(推荐)
2019/04/16 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
Python标准库内置函数complex介绍
2014/11/25 Python
python回调函数用法实例分析
2015/05/09 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
python实现猜数字小游戏
2020/03/24 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
python各层级目录下import方法代码实例
2020/01/20 Python
英国网上花店:Bunches
2016/11/29 全球购物
英国最大的正宗复古足球衫制造商和零售商:TOFFS
2018/06/21 全球购物
优秀小学生家长评语
2014/01/30 职场文书
优秀应届毕业生推荐信
2014/02/18 职场文书
创业融资计划书
2014/04/25 职场文书
三八妇女节演讲稿
2014/05/27 职场文书
奥运会口号
2014/06/13 职场文书
初中国旗下的演讲稿
2014/08/28 职场文书
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL