Django Celery,Celery是一个高


Celery 用途

Celery是一个高效的异步任务队列/基于分布式消息传递的作业队列,可以轻松帮我们在Django项目中设置执行异步和周期性任务。

Celery是一个高效的基于分布式消息传递的作业队列。它主要通过消息(messages)传递任务,通常使用一个叫Broker(中间人)来协调client(任务的发出者)和worker(任务的处理者)。 clients发出消息到队列中,broker将队列中的信息派发给 Celery worker来处理。Celery本身不提供消息服务,它支持的消息服务(Broker)有RabbitMQ和Redis。

消息中间件(message broker)、任务执行单元(worker)和 任务执行结果存储(task result store)组成。

Celery 架构

celery 架构

参考 【https://www.cnblogs.com/zx0524/p/17347566.html】

 消息中间件

celery本身是不提供服务的,但是可以方便的和第三方提供的消息中间件集成。包括,RabbitMQ、Redis。

任务执行单元

Worker是celery提供的任务执行单元,worker并发的运行在分布式的系统节点上

任务结果存储

Task result store用来存储Worker执行的任务的结果,Celery支持以不同方式存储任务的结果,包括AMQP, redis等。

完整架构图

参考【https://www.jianshu.com/p/5df828670971】

 

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

Celery Worker : 执行任务的消费者, 通常会在多台服务器运行多个消费者, 提高运行效率.

Broker : 消息代理, 队列本身. 也称为消息中间件. 接受任务生产者发送过来的任务消息, 存进队列再按序分发给任务消费方(通常是消息队列或者数据库).

Producer : 任务生产者. 调用 Celery API , 函数或者装饰器, 而产生任务并交给任务队列处理的都是任务生产者.

Result Backend : 任务处理完成之后保存状态信息和结果, 以供查询.

配置

celery.py中 可以设置 #任务结果保存时间

# Optional configuration, see the application user guide.
app.conf.update(
    result_expires=3600,   #任务结果保存时间
)

调用任务

如果想看任务结果的话,需要在调用 任务时 赋值个变量,例如

>>> result = add.delay(4, 4) 

如果想查看任务是否完成,可调用下面命令,返回布尔值

>>> result.ready() 

想拿到任务执行结果,调用下面命令(注意:想拿到结果首先得配置接收任务的中间件,否则会报错)

result.get() 

更多知识

这个官方文档详细演示了一个入门的例子《Using Celery with Django》

https://docs.celeryq.dev/en/stable/django/first-steps-with-django.html

《Celery 中文手册》

https://www.celerycn.io/

评论关闭