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 相关文章推荐
centos下更新Python版本的步骤
Feb 12 Python
Python实现视频下载功能
Mar 14 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
python requests 使用快速入门
Aug 31 Python
关于Python如何避免循环导入问题详解
Sep 14 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
使用pd.merge表连接出现多余行的问题解决
Jun 16 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
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
php判断表是否存在的方法
2015/06/18 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
PDO::commit讲解
2019/01/27 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
javascript实现简单的页面右下角提示信息框
2015/07/31 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
原生js二级联动效果
2017/06/20 Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
2018/03/02 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
python 正则表达式 概述及常用字符
2009/05/04 Python
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
wxPython事件驱动实例详解
2014/09/28 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
如何理解python对象
2020/06/21 Python
详解python 内存优化
2020/08/17 Python
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
群胜软件Java笔试题
2012/09/29 面试题
贷款承诺书范文
2014/05/19 职场文书
销售行政专员岗位职责
2014/06/10 职场文书
教师节晚会主持词
2015/06/30 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
Java使用Unsafe类的示例详解
2021/09/25 Java/Android
JS class语法糖的深入剖析
2022/07/07 Javascript