文章插图
来源:古明地觉的编程教室
什么是 celery
这次我们来介绍一下 Python/ target=_blank class=infotextkey>Python 的一个第三方模块 celery , 那么 celery 是什么呢?
-
celery 是一个灵活且可靠的 , 处理大量消息的分布式系统 , 可以在多个节点之间处理某个任务;
-
celery 是一个专注于实时处理的任务队列 , 支持任务调度;
-
celery 是开源的 , 有很多的使用者;
-
celery 完全基于 Python 语言编写;
所以 celery 本质上就是一个任务调度框架 , 类似于 Apache 的 airflow , 当然 airflow 也是基于 Python 语言编写 。
不过有一点需要注意 , celery 是用来调度任务的 , 但它本身并不具备存储任务的功能 , 而调度任务的时候肯定是要把任务存起来的 。因此要使用 celery 的话 , 还需要搭配一些具备存储、访问功能的工具 , 比如:消息队列、redis缓存、数据库等等 。官方推荐的是消息队列 RabbitMQ , 个人认为有些时候使用 Redis 也是不错的选择 , 当然我们都会介绍 。
那么 celery 都可以在哪些场景中使用呢?
-
异步任务:一些耗时的操作可以交给celery异步执行 , 而不用等着程序处理完才知道结果 。比如:视频转码、邮件发送、消息推送等等;
-
定时任务:比如定时推送消息、定时爬取数据、定时统计数据等等;
celery 的架构
我们看一下 celery 的架构:
文章插图
-
producer:生产者 , 专门用来生产任务(task);
-
celery beat:任务调度器 , 调度器进程会读取配置文件的内容 , 周期性地将配置文件里面到期需要执行的任务发送给消息队列 , 说白了就是生产定时任务;
-
broker:任务队列 , 用于存放生产者和调度器生产的任务 。一般使用消息队列或者 Redis 来存储 , 当然具有存储功能的数据库也是可以的 。这一部分是 celery 所不提供的 , 需要依赖第三方 。作用就是接收任务 , 存进队列;
-
worker:任务的执行单元 , 会将任务从队列中顺序取出并执行;
-
backend:用于在任务结束之后保存状态信息和结果 , 以便查询 , 一般是数据库 , 当然只要具备存储功能都可以作为 backend;
下面我们来安装 celery , 安装比较简单 , 直接 pip install celery 即可 。这里我本地的 celery 版本是 5.2.7 , Python 版本是 3.8.10 。
另外 , 由于 celery 本身不提供任务存储的功能 , 所以这里我们使用 Redis 作为消息队列 , 负责存储任务 。因此你还要在机器上安装 Redis , 我这里有一台云服务器 , 已经安装好了 。
后续 celery 就会将任务存到 broker 里面 , 当然要想实现这一点 , 就必须还要有能够操作相应 broker 的驱动 。Python 操作 Redis 的驱动也叫 redis , 操作 RabbitMQ 的驱动叫 pika , 直接 pip install ... 安装即可 。
celery 实现异步任务
我们新建一个工程 , 就叫 celery_demo , 然后在里面新建一个 App.py 文件 。
# 文件名:app.py
import time
# 这个 Celery 就类似于 flask.Flask
# 然后实例化得到一个app
from celery import Celery
# 指定一个 name、以及 broker 的地址、backend 的地址
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 龙之家族|《龙之家族》这1细节,暗示了丹妮莉丝,才是最伟大的坦格利安?
- 小米|37岁财富自由!雷军接受央视采访:我要成伟大的人 小米要影响世界、造车是被逼的
- 中国最大的岛屿是日本岛 中国最大的岛屿是什么岛-张雪峰
- 盛明兰|重温《知否》,王老太师一生最大的败笔,就是娶了偏心的王老太太
- 韩剧|《当你沉睡时》:当噩梦照进现实,救赎和信任才是最强的陪伴
- 赵鹏翔|“李易峰”事件最大的受益者是谁?
- 罚罪|《罚罪》:大王现身,是全剧最大的反转吗,网友:不是的
- |能力,让一个人迅速脱颖而出,如何发挥出你的最强技能?
- 华为|喷问界M7不好看的人品位比较Low!余承东:华为做伟大的设计
- 最大的恐龙有多大 最大的恐龙排行榜前十名