Celery异步调度框架

介绍

之前部门开发一个项目我们需要实现一个定时任务用于收集每天DUBBO接口、域名以及TOMCAT(核心应用)的访问量,这个后面的逻辑就是使用定时任务去ES接口抓取数据存储在数据库中然后前台进行展示。

点开以后的详情

在这个项目中使用的定时任务是python-crontab这个东西,它很简单但是使用起来有些不方便,虽然程序后来也没有进行修改,但是还是想看看有没有更好的定时任务框架,后来就发现了Celery这个项目。下面我们看看Celery的架构,让大家有个整体认识:

下面先来认识一下它的一些组件以及这些组件或者叫做角色的是干什么的

Task:任务(Task)就是你要做的事情,例如一个注册流程里面有很多任务,给用户发验证邮件就是一个任务,这种耗时的任务就可以交给Celery去处理,还有一种任务是定时任务,比如每天定时统计网站的注册人数,这个也可以交给Celery周期性的处理。我们在tasks.py中写的就是worker要可以执行的任务。

Broker: 在Celery中这个角色相当于数据结构中的队列,介于生产者和消费者之间经纪人。例如一个Web系统中,生产者是主程序,它生产任务,将任务发送给 Broker,消费者是 Worker,是专门用于执行任务的后台服务。Celery本身不提供队列服务,一般用Redis或者RabbitMQ来实现队列服务。

Worker: Worker 就是那个一直在后台执行任务的人,也成为任务的消费者,它会实时地监控队列中有没有任务,如果有就立即取出来执行。

Beat: Beat 是一个定时任务调度器,它会根据配置定时将任务发送给 Broker,等待 Worker 来消费。

Backend: Backend 用于保存任务的执行结果,每个任务都有返回值,比如发送邮件的服务会告诉我们有没有发送成功,这个结果就是存在Backend中,当然我们并不总是要关心任务的执行结果。

Exchanges:交换器,用于把不同消息放到不同的消息队列中

Queues:消息队列
为什么需要这两个worker会监控特定的队列同时也有一个默认的交换器,通常会有多个worker处理不同任务,那如何区分不同消息属于哪个worker处理呢这就需要交换器和队列。通常不需要指定队列和交换器因为有一个自动路由功能,如果你需要配置更加复杂的路由就需要使用这两个。默认的queue/exchange/binding的键是celery,exchange的类型是direct

安装

我的环境是Python3.6

# 安装celery
pip install celery
# 因为我这里用到redis做后端所以需要安装redis,但是需要注意虽然我的celery版本是最新的,但是redis驱动你不能用最新的
# 否则任务执行会失败
pip install redis==2.10.6
# flower组件不是必须的,它是用来对celery进行监控的
pip install flower

Celery入门

猜你喜欢

转载自www.cnblogs.com/yunxizhujing/p/10340733.html