Python Celery异步任务队列使用方法解析
作者:Yi_warmth 发布时间:2023-05-18 02:34:53
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
来源:https://www.cnblogs.com/zhouzetian/p/13380533.html


猜你喜欢
- 当我们经常在代码中使用 Python 字符串时,您可能需要以相反的顺序使用它们。Python 包含一些方便的工具和技术,可以在这些情况下为您
- Hello every, 我是Sunrise_Chen,有人知道我吗?好久没来这里了,以前偶尔会来这里潜水今天心情很好,写了几个特效果。特效
- 当程序中出现错误时怎么解决?也就是我们所说的bug(缺陷),以及工作中如何对bug进行调试❤ 什么是bug(缺陷)软件缺陷就是通
- 1. getattr()函数是Python自省的核心函数,具体使用大体如下:class A: def __init__(self): sel
- hello.html 文件代码如下:HelloWorld/templates/hello.html 文件代码:<h1>{{ he
- vue router路由嵌套不显示问题的解决方法,具体内容如下路由嵌套,vue2.0 router中嵌套路由不成功,如何解决?我先说下我的需
- python修改大数据文件时,如果全加载到内存中,可能会导致内存溢出。因此可借用如下方法,将分件分段读取修改。with open('
- PDO是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么 php
- 读取docx文档使用的包是python-docx1. 安装python-docx包sudo pip install python-docx2
- 在向表中插入数据的时候,经常遇到这样的情况:1、首先判断数据是否存在;2、如果不存在,则插入;3、如果存在,则更新。 在 SQL
- general_log(查询日志)开启和关闭一、查询日志开启方法一:mysql>set global general_log_file
- 预编译语句预编译语句是一种用于执行参数化SQL查询的技术,它可以提高性能并减少SQL注入的风险。预编译语句主要有以下优势:避免SQL注入攻击
- 前言在使用pandas的时候,有些场景需要对数据内部进行分组处理,如一组全校学生成绩的数据,我们想通过班级进行分组,或者再对班级分组后的性别
- Mysql 中数据是要落盘的,这点大家都知道。读写磁盘速度是很慢的,尤其和内存比起来更是没的说。但是,我们平时在执行 SQL 时,无论写操作
- 日志级别CRITICAL 50ERROR 40WARNING 30INFO 20DEBUG 10logging.basicConfig()函
- 前言在深度学习训练的过程中,随着网络层数的提升,我们训练的次数,参数都会提高,训练时间相应就会增加,我们今天来了解迁移学习一、经典的卷积神经
- 问题:在论坛发表回复时出现“The table is full”的提示,字面意义上是数据表已满的意思。因为很少有开发者遭遇单一表超过4G的情
- 本文实例讲述了Python3使用requests模块实现显示下载进度的方法。分享给大家供大家参考,具体如下:一、配置request1. 相关
- 前言大家都知道Python的优点是开发效率高,使用方便,C++则是运行效率高,这两者可以相辅相成,不管是在Python项目中嵌入C++代码,
- 1、联合查询联合查询又称为多表查询,它的基本执行过程就是笛卡尔积1.1 认识笛卡尔积那么什么是笛卡尔积呢?答:笛卡尔积就是将两张表放在一起进