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,Celery,异步,任务
0
投稿

猜你喜欢

  • MySql分组后随机获取每组一条数据的操作

    2024-01-26 21:12:11
  • Golang验证器之validator是使用详解

    2024-01-29 23:40:28
  • 使用AJAX和Django获取数据的方法实例

    2021-11-14 20:40:20
  • 使用Python编写一个最基础的代码解释器的要点解析

    2023-07-16 11:47:22
  • 详解Python AdaBoost算法的实现

    2021-08-16 19:53:27
  • Python实现识别XSS漏洞的方法详解

    2023-07-27 10:51:53
  • ASP.NET Core基础之Main方法讲解

    2024-06-05 15:43:21
  • Python使用Asyncio实现检查网站状态

    2023-01-23 18:56:39
  • pycharm创建并使用虚拟环境的详细图文教程

    2022-05-27 18:19:51
  • Pytorch中torch.stack()函数的深入解析

    2021-06-17 18:39:09
  • 基于Python编写一个简单的垃圾邮件分类器

    2022-02-26 08:11:23
  • Vue3新属性之css中使用v-bind的方法(v-bind in css)

    2024-05-28 16:01:07
  • python中的unittest框架实例详解

    2023-01-27 06:13:41
  • python PyTorch参数初始化和Finetune

    2023-04-26 08:53:44
  • Python如何用str.format()批量生成网址(豆瓣读书为例)

    2022-10-02 15:38:41
  • Python列表(list)所有元素的同一操作解析

    2021-05-06 22:56:31
  • 实际应用:MySQL5存储过程编写

    2008-11-11 12:25:00
  • JavaScript封装弹框插件的方法

    2024-04-30 10:20:32
  • 利用Python实现自动工作汇报的脚本分享

    2022-05-31 10:55:37
  • python破解WiFi教程代码,Python蹭网原理讲解

    2022-09-05 20:14:43
  • asp之家 网络编程 m.aspxhome.com