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发送各种形式的邮件的方法汇总
Nov 09 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
django站点管理详解
Dec 12 Python
python中的随机函数小结
Jan 27 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
Python 实现Windows开机运行某软件的方法
Oct 14 Python
python 自定义异常和异常捕捉的方法
Oct 18 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
Jun 28 Python
Python使用selenium + headless chrome获取网页内容的方法示例
Oct 16 Python
Django视图扩展类知识点详解
Oct 25 Python
基于Python的Jenkins的二次开发操作
May 12 Python
python exit出错原因整理
Aug 31 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
Search Engine Friendly的URL设计
2006/10/09 PHP
php不写闭合标签的好处
2014/03/04 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
php实现算术验证码功能
2018/12/05 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
浅谈Javascript鼠标和滚轮事件
2012/06/27 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
jCallout 轻松实现气泡提示功能
2013/09/22 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
开启BootStrap学习之旅
2016/05/04 Javascript
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
js判断节假日实例代码
2017/12/27 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
vue之debounce属性被移除及处理详解
2019/11/13 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
Python实现简单状态框架的方法
2015/03/19 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
Python实现的特征提取操作示例
2018/12/03 Python
python爬取”顶点小说网“《纯阳剑尊》的示例代码
2020/10/16 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
幼儿园教师节活动方案
2014/02/02 职场文书
读书月活动方案
2014/05/22 职场文书
英语教师求职信
2014/06/16 职场文书
手把手带你彻底卸载MySQL数据库
2022/06/14 MySQL