celery异步

celery介绍
Celery 是一个强大的分布式任务队列,它可以让任务的执行完全脱离主程序,甚至可以被分配到其他主机上运行。我们通常使用它来实现异步任务( async task )和定时任务( crontab )。 异步任务比如是发送邮件、或者文件上传, 图像处理等等一些比较耗时的操作 ,定时任务是需要在特定时间执行的任务。它的架构组成如下图:
在这里插入图片描述

.0任务队列
任务队列是一种跨线程、跨机器工作的一种机制.

任务队列中包含称作任务的工作单元。有专门的工作进程持续不断的监视任务队列,并从中获得新的任务并处理.

.0任务模块
包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列。

0消息中间件 Broker
Broker ,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。 Celery 本身不提供队列服务,官方推荐使用 RabbitMQ 和 Redis 等。

0任务执行单元 Worker
Worker 是执行任务的处理单元,它实时监控消息队列,获取队列中调度的任务,并执行它。

0任务结果存储 Backend
Backend 用于存储任务的执行结果,以供查询。同消息中间件一样,存储也可使用 RabbitMQ, Redis 和 MongoDB 等。

使用 Celery 实现异步任务的步骤:
(1) 创建一个 Celery 实例
(2) 启动 Celery Worker ,通过delay() 或 apply_async()(delay 方法封装了 apply_async, apply_async支持更多的参数 ) 将任务发布到broker
(3) 应用程序调用异步任务

(4)存储结果 (发布的任务需要return才会有结果,否则为空)

Celery Beat:任务调度器,Beat进程会读取配置文件的内容,周期性地将配置中到期需要执行的任务发送给任务队列

使用 Celery 实现定时任务的步骤:
(1) 创建一个 Celery 实例

(2) 配置文件中配置任务 ,发布任务 celery A xxx beat

(3) 启动 Celery Worker

(4) 存储结果

celery定时任务简单使用
以下是使用celery实现一个定时任务的demo,能够良好的定时执行。

在这里插入图片描述
1.celery初始化文件
在这里插入图片描述
1.任务函数(epp_scripts目录下)
在这里插入图片描述
1.发布任务
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述