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实现监控windows服务并自动启动服务示例
Apr 17 Python
如何用itertools解决无序排列组合的问题
May 18 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
Python字符串的一些操作方法总结
Jun 10 Python
java判断三位数的实例讲解
Jun 10 Python
简单了解python协程的相关知识
Aug 31 Python
python 多维高斯分布数据生成方式
Dec 09 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
python 对象真假值的实例(哪些视为False)
Dec 11 Python
python反编译教程之2048小游戏实例
Mar 03 Python
python 实现体质指数BMI计算
May 26 Python
Django中celery的使用项目实例
Jul 07 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
用DBSQL类加快开发MySQL数据库程序的速度
2006/10/09 PHP
php session和cookie使用说明
2010/04/07 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
javascript读取xml
2006/11/04 Javascript
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
jQuery实现的监听导航滚动置顶状态功能示例
2018/07/23 jQuery
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
JS实现页面数据懒加载
2020/02/13 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
[01:28:56]2014 DOTA2华西杯精英邀请赛 5 24 CIS VS DK
2014/05/26 DOTA
python学习手册中的python多态示例代码
2014/01/21 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
python中set()函数简介及实例解析
2018/01/09 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
怀俄明州飞钓:Platte River Fly Shop
2017/12/28 全球购物
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
文艺晚会主持词
2014/03/24 职场文书
教师个人读书活动总结
2014/07/08 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL