分布式异步框架celery + Redis 安装配置

引入

这里不对web框架做过多说明,到时候在总结一篇在这里插入图片描述

python的常见web框架

django、flask、tornado、sanic、fastapi..

各框架区别

- 内部集成功能的多少

  • django,内部提供了很多组件。 【相对大】
  • flask、tornado、sanic、fastapi… 本身自己功能很少+第三方组件。【相对小】

- 同步框架 vs 异步非阻塞

  • 异步非阻塞框架框架

    • 异步非阻塞:tornado、sanic、fastapi、django
      在这里插入图片描述
      缺点:实际上大部分网站不会有太多IO操作,所以可能用不上异步非阻塞框架
  • 同步框架

    • 同步:django、flask、bottle、webpy…
      请添加图片描述
      大部分网站使用该框架,但IO操作耗时问题没有有效解决,所以后续引入celery的概念

Celery介绍

# 官网
https://docs.celeryq.dev/en/stable/
# github源码
https://github.com/celery/celery

是什么?

  1. celery 是一个灵活且可靠的,处理大量消息的分布式系统,可以在多个节点之间处理某个任务

    • 人话:实现了异步效果
    • 举例:现在有一个作业,你一个人做需要24h,而你与同学一起做需要12h,你找24个同学1h就做完了,当然你并没有这么多好同学◖⚆ᴥ⚆◗
  2. celery 是一个专注于实时处理的任务队列,支持任务调度

  3. celery 是开源的,有很多的使用者

  4. celery 完全基于 Python 语言编写

  5. 所以 celery 本质上是一个分布式的异步任务调度框架,类似于 Apache 的 airflow

    • 分布式:可以运行在不同的计算机节点上
    • 异步任务:同时干好多事
    • 框架
  6. celery 只是用来调度任务的,但它本身并不具备存储任务的功能,而调度任务的时候肯定是要把任务存起来的。因此要使用 celery 的话,还需要搭配一些具备存储、访问功能的工具,比如:消息队列、Redis缓存、数据库等等。官方推荐的是消息队列 RabbitMQ,我们使用 Redis

    • 消息队列:Rabbitmq,Kafka

使用场景

  1. 异步任务
    • 一些耗时的操作可以交给celery异步执行,而不用等着程序处理完才知道结果。
    • 视频转码、邮件发送、消息推送等等
  2. 定时任务
    • 定时推送消息、定时爬取数据、定时统计数据等
  3. 延迟任务
    • 提交任务后,等待一段时间再执行某个任务

celery架构

Celery 架构,它采用典型的生产者-消费者模式,主要由以下部分组成:

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

  2. Producer:需要在队列中进行的任务,一般由用户、触发器或其他操作将任务入队,然后交由 workers 进行处理。调用了 Celery 提供的 API、函数或者装饰器而产生任务并交给任务队列处理的都是任务生产者。

  3. Broker:即消息中间件,在这指任务队列本身,Celery 扮演生产者和消费者的角色,brokers 就是生产者和消费者存放/获取产品的地方(队列)。

  4. Celery Worker:执行任务的消费者,从队列中取出任务并执行。通常会在多台服务器运行多个消费者来提高执行效率。

  5. Result Backend:任务处理完后保存状态信息和结果,以供查询。Celery不提供,但Celery 默认已支持 Redis、RabbitMQ、MongoDB、Django ORM、SQLAlchemy 等方式。

实际应用中,用户从 Web 前端发起一个请求,我们只需要将请求所要处理的任务丢入任务队列 broker 中,由空闲的 worker 去处理任务即可,处理的结果会暂存在后台数据库 backend 中。我们可以在一台机器或多台机器上同时起多个 worker 进程来实现分布式地并行处理任务。

在这里插入图片描述

小结:

- celery 分布式异步任务框架--》实现异步
- 需要有redis支持,这个框架才能用
- 同步调用 VS 异步调用

在这里插入图片描述

Redis 安装配置

常见的数据库,不做过多介绍

下载Redis

Redis默认支持的是Linux,如果win下载就使用下面链接跳转吧
https://github.com/MicrosoftArchive/redis/releases
在这里插入图片描述

  • 注意:这里不建议使用Docker部署,可参考https://zhuanlan.zhihu.com/p/159229406

安装Redis

  • 注意添加环境变量,不然你的操作系统可能不认识他。自定义位置
    在这里插入图片描述
  • Redis 默认端口是6379在这里插入图片描述
  • 无视
    在这里插入图片描述
  • 打开终端
# 看是否连接成功
redis-cli
# 成功会出现 127.0.0.1:6379>
  • 包错就执行就右键此电脑,点击管理—>打开服务在这里插入图片描述
  • 点击R按回车可以快速找到Redis,右键启动
    在这里插入图片描述
    再去cmd中redis-cli测试一下是否连接成功

安装Redis GUI

使用Redis图形化界面:

  1. Tiny PDM: 这款比较好看,我用的就这个https://github.com/tiny-craft/tiny-rdm
  2. 用pycharm内的也可以,自己折腾,我不会

celery使用

首先在python创建一个python项目,创建虚拟环境

安装依赖

# 2 安装celery
pip install celery
# 3 安装redis(消息队列和结果存储使用redis),这是用来让python认识redis的
pip install redis
# 4 安装eventlet(win 平台)
pip install eventlet

使用

  1. 编写celery_demo.py
import time
from celery import Celery
broker = 'redis://127.0.0.1:6379/1'
backend = 'redis://127.0.0.1:6379/2'
app = Celery('demo', broker=broker, backend=backend)
@app.task  # 被装饰器装饰了,才是celery的任务
def add(a, b):print('a+b的结果是', a + b)time.sleep(1)# 模拟任务耗时return a + b
  1. 提交任务add_task.py
from celery_demo import add
res = add.delay(7,8) # 只是提交,没有真正执行
print(res)  # 获取的不是结果,是uuid
  1. redis中可以看到被提交的任务-没执行

  2. 启动worker执行任务,这是在终端执行的,注意文件夹结构,不对就cd进去

# win:  celery -A celery_demo worker -l info -P eventletcelery -A <有app的py文件的名字> worker -l info -P eventlet# mac linux:  celery -A celery_demo worker -l info

在这里插入图片描述

补充细节

  • 只有代码发生变化时需要,worker需要重启
  • 消息队列 vs 发布订阅
    • 消息队列:第一个人得到第一个消息,就不会得到第二个消息,第二个人会得到第二个消息,后续同理在这里插入图片描述 - 发布订阅:这个简单就不用画图了,就相当与一个人一订阅所有消息就全都可以看了,下一个人同理,还有就向你关注我一样,随时看我的学习笔记૮₍⑅˶•▿•˶⑅₎ა

结尾

后续会对数据库,django,celery,web框架做出笔记,拭目以待吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/13582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java集合类详解

目录 1、数组导入&#xff1a; 2、单列集合 List接口 1、ArrayList&#xff1a;数组列表 ArrayList类中的方法 2、LinkedList&#xff1a;链表列表 3、Vector&#xff1a;数组列表 4、list集合的遍历 1、for循环遍历 2、增强for循环 3、迭代器遍历 Set接口 1、Has…

data studio连接到虚拟机上的openGauss

参考&#xff1a;使用DataStudio连接本地虚拟机中的opengauss数据库_big data_白日梦想家_胖七七-华为云开发者联盟 本实验虚拟机安装的是CentOS7 数据库版本是&#xff1a;openGauss-5.0.2-CentOS-64bit-all.tar.gz 1.配置pg_hba.conf 首先使用su - omm登录到omm用户&…

MySQL数据库,创建表及其插入数据和查询数据

首先&#xff0c;由上图创建表 mysql> create table worker( -> dept_id int(11) not null, -> emp_id int (11) not null, -> work_time date not null, -> salary float(8,2) not null, -> poli_face varchar(10) not null default 群众, -> name…

华为设备WLAN基础配置

WLAN基础配置之AP上线 配置WLAN无线网络的第一阶段&#xff0c;AP上线技术&#xff1a; 实验目标&#xff1a;使得AP能够获得来自AC的DHCP地址服务的地址&#xff0c;且是该网段地址池中的IP。 实验步骤&#xff1a; 1.把AC当作三层交换机配置虚拟网关 sys Enter system view…

安卓CardView使用

目录 前言一、基础使用1.1 依赖导入1.2 CardView的常用属性1.3 CardView继承关系 二、关于Z轴的概念三、CardView效果3.1 圆角 CardView3.2 阴影 CardView3.3 设置卡片背景3.4 设置卡片背景&#xff08;内部颜色&#xff09;3.5 同时设置背景颜色 前言 CardView是Android支持库…

WXML模板语法-数据绑定

1.数据绑定的基本原则 (1)在data中定义数据 (2)在WXML中使用数据 2.在data页面中定义数据&#xff1a;在页面对应的.js文件中&#xff0c;把数据定义在data对象中即可 &#xff08;这里打错了 应该是数组类型的数据... 报意思啊&#xff09; 3.Mustache语法的格式 把data中的…

低代码开发平台:开启企业数字化转型的快捷通道

低代码开发平台&#xff08;Low-Code Development Platform&#xff09;是近年来企业数字化转型中备受瞩目的技术工具&#xff0c;其被誉为加速业务上线的利器。随着信息技术的迅猛发展&#xff0c;企业对于数字化的需求与日俱增&#xff0c;但传统的软件研发流程往往耗时耗力&…

MATLAB|【免费】融合正余弦和柯西变异的麻雀优化算法SCSSA-CNN-BiLSTM双向长短期记忆网络预测模型

目录 主要内容 部分代码 部分结果一览 下载链接 主要内容 该程序实现多输入单输出预测&#xff0c;通过融合正余弦和柯西变异改进麻雀搜索算法&#xff0c;对CNN-BiLSTM的学习率、正则化参数以及BiLSTM隐含层神经元个数等进行优化&#xff0c;并对比了该改进算法…

摄像头应用测试

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…

Linux 信号捕捉与处理

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; ​ 目录 前言 1. 信号的处理时机 1.1用户…

【排版问题解决】word加入公式时字间距突然变大

出现以下问题 解决方案 第一步:选择段落 第二步 段落括起来后右键选择“段落”- 第三步 “换行和分页”-在换行里打勾“允许西文在单词中间换行”。 恢复格式

vue.js状态管理和服务端渲染

状态管理 vuejs状态管理的几种方式 组件内管理状态&#xff1a;通过data&#xff0c;computed等属性管理组件内部状态 父子组件通信&#xff1a;通过props和自定义事件实现父子组件状态的通信和传递 事件总线eventBus&#xff1a;通过new Vue()实例&#xff0c;实现跨组件通…

LP-MSPM03507学习资料汇总

(因对MSPM0研究不够深入,故暂不开启浏览权限,权当记录学习。但愿尽快掌握供大家免费阅读。有意者可私信我共同学习) 一、延时函数 1、滴答定时器SYSTICK 1.1 SysConfig配置 配置1ms延时函数,并开启中断 1.2 编写延时函数delay_ms unsigned int utick = 0;//滴答定时器中…

57. UE5 RPG 处理AI敌人转向以及拾取物品的问题

在上一篇文章中&#xff0c;我们实现了使用AI行为树控制敌人进行移动&#xff0c;它们可以一直跟随玩家&#xff0c;虽然现在还未实现攻击。但在移动过程中&#xff0c;我发现了有两个问题&#xff0c;第一个是敌人转向的时候很僵硬&#xff0c;可以说是瞬间转向的&#xff0c;…

Vue3实战笔记(39)—封装页脚组件,附源码

文章目录 前言一、封装页脚组件二、使用组件总结 前言 在Web开发中&#xff0c;页脚组件是一个重要的部分&#xff0c;它为用户提供关于网站的信息、导航链接以及版权声明等。而封装页脚组件则是一种高效的方法&#xff0c;可以提高代码的可重用性和可维护性。 一、封装页脚组…

重生之我要精通JAVA--第五周笔记

文章目录 APIJDK7时间Date时间类CalendarSimpleDateFormat 类SimpleDateFormat 类作用 JDK8时间Zoneld时区 包装类Integer成员方法 Arrays Lambda表达式标准格式注意点好处省略写法 集合进阶Collection迭代器遍历Collection集合获取迭代器Iterator中的常用方法细节注意点 增强f…

机器学习势系列教程(3):cp2k的安装

大家好&#xff0c;我是小马老师。 本文继续介绍机器学习势相关内容&#xff1a;cp2k的安装。 和abacus一样&#xff0c;cp2k也是一款开源的第一性原理模拟软件&#xff0c;模拟的数据也可作为机器学习势的训练数据集。 cp2k安装方法也很多&#xff0c;常见的有docker安装、…

2024年中国电机工程学会杯数学建模思路 - 案例:最短时间生产计划安排

# 前言 2024电工杯(中国电机工程学会杯)数学建模思路解析 最新思路更新(看最新发布的文章即可): https://blog.csdn.net/dc_sinor/article/details/138726153 最短时间生产计划模型 该模型出现在好几个竞赛赛题上&#xff0c;预测2022今年国赛也会与该模型相关。 1 模型描…

安当SLA操作系统双因素认证——成功解决Windows远程桌面登录的安全问题

Windows远程桌面登录的安全风险主要包括以下几个方面&#xff1a; 弱密码和暴力破解&#xff1a;如果远程桌面用户使用了弱密码&#xff0c;或者密码被泄露&#xff0c;攻击者可能会使用暴力破解技术来尝试猜测密码&#xff0c;从而获取远程桌面的访问权限。中间人攻击&#x…

【编译原理复习笔记】语法分析-补充(二义性与LR错误处理)

二义性文法的 LR 分析 每个二义性文法都不是 LR 的 但是某些二义性文法更加简短&#xff0c;描述更方便 如 I7 和 I8 具有移进归约冲突 使用优先级和结合性解决冲突 对于 I7&#xff0c;由于乘号优先级高于加号&#xff0c;所以当下一个输入符号为乘号时&#xff0c;我们优…