Celery异步的分布式任务调度理解

什么是Celery呢?

Celery是一个用Python开发的异步的分布式任务调度模块。

Celery本身不包含消息服务,使用第三方消息服务,也就是Broker,来传递任务,目前支持的有Rebbimq,Redis,数据库以及其他的一些比如Amazon SQS,Monogdb和IronMQ 。

Celery支持同步和异步执行两种模式。同步模式为任务调用方等待任务执行完成,这种方式等同于RPC(Remote Procedure Call), 异步方式为任务在后台执行,调用方调用后就去做其他工作,之后再根据需要来查看任务结果。Celery自己没有实现消息队列,而是直接已存在的消息队列作为Broker角色。官方推荐的Broker为 RabbitMQ ,除此之外,Redis、Beanstalkd、MongoDB等也都支持,具体可参考 官方文档

Celery整体架构可以理解为下图:

整体上包括三个角色:

  • Celery client: 这是任务生产者,它负责将任务发送到Broker中。
  • Broker: Broker负责将任务分发给相应的celery worker。
  • Celery worker: 这是任务的执行者,完成相应的业务逻辑,在具体实现上体现为Python函数。

下面说一下Celery实例:

使用Celery完成发送短信:

这里使用redis作为消息队列(任务队列)

  关于Redis和Rebbimq 消息队列的比较:https://www.cnblogs.com/lzc978/articles/10291597.html

整个celery服务器实时监听任务队列逻辑

0. 安装环境

0.1 pip安装Celery框架

pip install celery

0.2 启动Celery

celery -A 应用的包路路径 worker -l info

1. 代码结构

1.1 config.py配置文件

# celery配置文件
# 指定任务队列列的位置 使用redis做为broker任务队列
broker_url = "redis://192.168.103.210/7"

1.2 main.py celery分布式异步任务队列启动文件

# celery启动文件
from celery import Celery

# 创建celery实例例
celery_app = Celery(‘file‘)
# 加载celery配置
celery_app.config_from_object(‘celery_tasks.config‘)
# 自动注册celery任务
celery_app.autodiscover_tasks([‘celery_tasks.sms‘])

2. Celery异步任务的定义

2.1 sms.tasks.py  异步任务/将被放在redis的任务队列(broker)中等待触发执行

# 发送短信的异步任务
from .yuntongxun.sms import CCP
from . import constants
from celery_tasks.main import celery_app

# 装饰器?将send_sms_code装饰为异步任务,并设置别名
@celery_app.task(name=‘send_sms_code‘)
def send_sms_code(mobile, sms_code):
"""
发送短信异步任务
:param mobile: 手机号
:param sms_code: 短信验证码
:return: None
"""
CCP().send_template_sms(mobile, [sms_code, constants.SMS_CODE_REDIS_EXPIRES // 60], constants.SEND_SMS_TEMPLATE_ID)

3. 开启Celery

celery -A celery_tasks.main worker -l info

4. 执行Celery异步任务(触发worker)

4.1 views.py  视图逻辑,即触发执行worker的业务逻辑

# 生成和发送短信验证码
sms_code = ‘%06d‘ % random.randint(0,999999)
# CCP().send_template_sms(mobile,[sms_code, constants.SMS_CODE_REDIS_EXPIRES // 60], 1)
# celery异步发送短信
send_sms_code.delay(mobile,sms_code)

至此,一个简单的异步分布式Celery(异步任务)服务器搭建完成

原文地址:https://www.cnblogs.com/lzc978/p/10296273.html

时间: 2024-07-31 13:14:00

Celery异步的分布式任务调度理解的相关文章

window下搭建celery+rabbitmq 分布式任务调度

环境搭建: 1. 安装celery4.0版本以上 2.安装erlang的运行环境,因为rabbitmq是基于erlang环境的;    下载链接:http://www.erlang.org/download.html 3. 安装rabbitmq ,下载链接:http://www.rabbitmq.com/download.htm demo测试: 创建tasks.py from celery import Celery app = Celery('tasks',backend='',broker=

新一代分布式任务调度框架:当当elastic-job开源项目的10项特性

作者简介: 张亮,当当网架构师.当当技术委员会成员.消息中间件组负责人.对架构设计.分布式.优雅代码等领域兴趣浓厚.目前主导当当应用框架ddframe研发,并负责推广及撰写技术白皮书. 一.为什么需要作业(定时任务)? 作业即定时任务.一般来说,系统可使用消息传递代替部分使用作业的场景.两者确有相似之处.可互相替换的场景,如队列表.将待处理的数据放入队列表,然后使用频率极短的定时任务拉取队列表的数据并处理.这种情况使用消息中间件的推送模式可更好的处理实时性数据.而且基于数据库的消息存储吞吐量远远

分布式任务调度平台SIA-TASK的架构设计与运行流程

一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背景下,很多原先的任务调度平台已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台. 1.1 分布式任务调度的演进 在实际业务开发过程中,很多时候我们无可避免地需要使用一些定时任务来解决问题.通常我们会有多种解决方案:使用 Crontab 或 SpringCron (当然这种情况可能机器

分布式任务调度平台XXL-JOB

为获得更好的阅读体验,请访问原文:传送门 一.分布式任务调度概述 什么是任务调度平台 任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务.我们可以思考一下在以下场景中,我们应该怎么实现: 支付系统每天凌晨 1 点,进行一天清算,每月 1 号进行上个月清算: 电商整点抢购,商品价格8点整开始优惠 12306 购票系统,超过 30 分钟没有成功支付订单的,进行回收处理 为什么需要任务调度平台 定时任务是程序员不可避免的话题,很多业务场景需要我们某一特定的时刻去做某件任务.一

分布式任务调度框架xxl-job

github地址:https://github.com/xuxueli/xxl-job git.osc地址:http://git.oschina.net/xuxueli0323/xxl-job 博客地址(内附使用教程):http://www.cnblogs.com/xuxueli/p/4845111.html [最迅速的熟悉该项目的方式:执行Job库初始化SQL:Eclipse中导入xxl-job-admin项目,启动项目访问:即可:] 一.简介:<分布式任务调度框架xxl-job> 基于qu

集群与分布式 如何理解(自己的理解)

集群 与 分布式 如何理解 一. 概念理解 集群的理解:就是一台计算机处理不了太多的事情 ,需要大家组合在一起来完成一件事情. 分布式的理解:就是把一件事情分成好几个部分 ,每个人做其中的一部分. 二.图解 分布式 负责均衡集群 三.集群的种类: 负载均衡集群(Load Balance):Nginx反向代理  .DNS 轮训巡.LVS(Nat 模式 .隧道模式.直连路由) 高可用集群(High Availabe):Keepalive .Heartbeat 并行计算集群(HPC):不了解 申明:这

Gleasy的分布式任务调度中间件CloudJob | Gleasy团队博客

Gleasy的分布式任务调度中间件CloudJob | Gleasy团队博客

clover分布式任务调度系统

1.clover分布式调度介绍 clover分布式任务调度是完全使用Java技术自主开发 特点如下: 1.防单点故障 2.job可部署多台,但任务调度时,只有一台参执行.如果一台下线, clover选择其他已在zookeeper注册job来执行. 3.可管理监控程序 ,相关负责人的job不可用会发送邮件通知 4.提供管理后台,可手动停止任务,设置任务执行频率.恢复策 略.人工干预指定哪些job来工作,可查看任务执行进度.任务执行失败时会收到报警并记录日志. 5.执行中的任务,但未执行完成,不会再

分布式任务调度实现方式

背景 分布式任务调度是非常常见的一种应用场景,一般对可用性和性能要求不高的任务,采用单点即可,例如linux的crontab,spring的quarz,但是如果要求部署多个节点,达到高可用的效果,上面的方案就不适用了. 实际上任务调度的实现有两种情况,第一种是通过mq来实现,mq做好了数据切分,负载均衡的效果,本文说的是另一种情况. 要求 一.不重复 如果只达到这个要求,有很多方法,假设任务处理的是一张表中的数据,那可以根据某个字段取模达到不重复的效果. 二.不遗漏 如果用上面的方案解决了重复的