Django 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 中文手册》
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库