Celery

cnblogs.com/forward-wan

Celery的设计初衷,主要就是用来处理并发问题的

Celery主要适用于两大类场景:

1 异步:
有的任务执行时间较长,你不想让程序一直等待结果返回,可以先将改任务放入celery任务队列中,并从Celery获取一个任务ID。后续通过询问Celery来得知任务执行状态和进度。

2 定时:
需要定时执行同样的任务,Celery任务队列支持定时触发,可以按照时间间隔或者crontab表达式来触发任务。

Celery具有以下优点:

1 Simple(简单)
Celery 使用和维护都非常简单,并且不需要配置文件

2 Highly Available(高可用)
woker和client会在网络连接丢失或者失败时,自动进行重试。并且有的brokers 也支持“双主”或者“主/从”的方式实现高可用。

3 Fast(快速)
单个的Celery进程每分钟可以处理百万级的任务,并且只需要毫秒级的往返延迟(使用 RabbitMQ, librabbitmq, 和优化设置时)

4 Flexible(灵活)
Celery几乎每个部分都可以扩展使用,自定义池实现、序列化、压缩方案、日志记录、调度器、消费者、生产者、broker传输等等。

工作原理:

产生数据的模块(客户端),就形象地称为生产者;而处理数据的模块(服务端),就称为消费者。

生产者和消费者彼此之间不直接通讯,而通过消息队列(缓冲区)来进行通讯。所以生产者生产完数据之后不用等待消费者处理,直接扔给消息队列,消费者不找生产者要数据,而是直接从消息队列里取,消息队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个消息队列就是用来给生产者和消费者解耦的。

具体的:

客户端:下发任务(耗时操作)==》代理人:接收通知,将任务加入队列==》工人:监听队列,从队列中读取任务,执行新线程

概念:

任务task:耗时的函数,如云通信发短信

代理人broker:接收通知,将任务加入队列

队列queue:存储任务的地方==>redis存函数的名称

工人work:监听队列,从队列中读取任务,执行新线程

调用:函数.delay(参数)

posted @ 2021-02-07 22:37  涛子17180  阅读(73)  评论(2编辑  收藏  举报