使用fastapi框架开发web项目

1、为什么要用fastapi?

一直以来博主都是一直使用Django进行开发的,最近公司开始使用fastapi进行小项目的开发
通过博主对fastapi文档的翻阅,发现fastapi最引人注意的就是他的异步支持。(当然最新版的django也已经支持异步请求)

2、什么是异步?

异步相对应的就是同步
同步就是多件事排队做
而异步就是多件事同时做

3、在django中是怎么实现异步的呢?

django采取的是多线程实现异步。
当一个线程在做耗时操作的时候进行线程间切换,给人一种多个线程在同时运行的感觉。(当然了,多核cpu确实是真正的多线程。)。
切换的同时不仅要重新获取GIL锁,还要重新加载和记住上下文,这些开销对服务的性能是有一定影响的

4、fastapi中的异步

4.1 简单介绍一下协程的概念

相信大家都听说过协程这个概念,
协程是在一个线程间进行用户级资源切换的概念
是不是很抽象?
我来解释一下:

首先我们要了解线程属于进程,而协程属于线程
写过爬虫的同学应该了解过yield关键字,他就可以简单的作为一个协程来用
他可以构造一个生成器,可能有些同学会把生成器和一个普通的可迭代对象混为一谈(例如列表)

但是这又跟协程有什么关系呢?
是这样的,当用户要取一个元素的时候,这个生成器相当于被激活了,相当于开始占用线程资源,生成一个元素,返回之后就让出线程资源,直到用户取下一个元素。

这就是协程的思想:它没有线程间切换时资源的消耗大,并且完全由用户控制

4.2 fastapi中的协程

fastapi由较为完善的异步处理方案(没有非常完善)
他的基本语法与flask较为相似(虽然博主只写过一点flask)
值得一提的是asgi异步网关协议,这个网关协议有完善的异步请求与websocket的支持。

他对async/await有很好的支持
对应的web服务器是Uvicorn
我们可以使用sqlalchemy进行异步数据库查询

其实一个web项目的性能瓶颈大部分还是在io方面(数据库查询,web请求,系统io)
例如有些数据库查询确实耗时,我们又不想让他阻塞当前线程,我们就可以使用异步数据库查询
fastapi会在你注明异步数据库查询的地方让出cpu资源,让他去处理别的东西(比如另一个请求)
然后当你的数据库查询结束返回之后,再次回到当初让出资源的地方,继续往下执行。

5、协程相较于线程的优势:

协程可以记住上下文,从而避免在线程间切换中针对上下文切换的资源消耗和关于GIL锁的资源消耗

6、协程的使用场景

我们可以把计算机的动作大致分成两种,一种是计算型,一种是io型,当一个任务是计算型的时候,就意味着cpu要一直运行,这个时候我们是没法让出cpu资源的,而当一个任务是io型的,就相当于cpu一直在休息,在等待,这个时候我们就可以让出cpu的占用,让他去处理别的任务
所以协程异步并不是所有场景都适用,他主要用于io场景

关于fastapi框架的异步相关推荐

  1. 很火的Fastapi框架,用async函数真的比普通函数快吗?

    python的新款异步框架FASTAPI https://fastapi.tiangolo.com/ 是一款最近很火的框架. 我过去使用了Flask很多年,当一使用上fastapi,就喜欢上它了. 今 ...

  2. Python FastAPI 框架 操作Mysql数据库 增删改查

    2 比 1 更容易理解,可以先看2(单文件级别) 1.FastAPI 框架 操作Mysql数据库(项目多文件级别) FastAPI 可以使用任何您想要的关系型数据库. 在这里,让我们看一个使用着SQL ...

  3. fastapi 传输文件存文件_python3 FastAPI框架入门 基本使用, 模版渲染, 数据交互,cookie使用, 上传文件, 静态文件配置...

    [FastAPI框架入门 基本使用, 模版渲染, form表单数据交互, 上传文件, 静态文件配置] 安装pip3 install fastapi [all] pip3 install unicorn ...

  4. webconsole使用方法(fastapi框架)

    webconsole使用方法 项目背景 docker实现 linux实现 安装webconsole包 代码中需要改动的地方 引用路由 加入路由到访问路径 示例接口访问路径 项目背景 需要在自己的项目中 ...

  5. 详解Spring框架的异步请求

    文章目录 详解Spring框架的异步请求 1.导入响应的jar包(gson) 2.前端请求 3.后端逻辑处理并返回结果 详解Spring框架的异步请求 在开发过程中有异步请求和同步请求之分. 同步请求 ...

  6. FastAPI框架诞生的缘由(上)

    阅读本文大概需要 3.6 分钟. 原文:https://fastapi.tiangolo.com/alternatives/ 作者:tiangolo,FastAPI 的创作者,github star ...

  7. FastAPI ------框架基础

    FastAPI 一.初知FastAPI 1.1 FastAPI简介 1.2 安装FastAPI 1.2.1 虚拟环境安装 1.2.2 pip安装FastAPI 1.3 可能出现的问题 Error: [ ...

  8. html post请求 渲染,FastAPI框架入门 基本使用, 模版渲染, form表单数据交互, 上传文件, 静态文件配置...

    安装 pip install fastapi[all] pip install unicorn 基本使用(不能同时支持,get, post方法等要分开写) from fastapi import Fa ...

  9. Reactive框架:简化异步及事件驱动编程

    NET的Reactive Extensions包含一系列扩展方法和为.NET 4及Silverlight 4中新加入的 IObservable<out T> 和 IObserver< ...

最新文章

  1. c++ 读文件_C语言处理文件基础知识:文件、流和键盘输入
  2. 定理在数学中的简写形式_西方把勾股定理叫毕达哥拉斯定理,我们的教材上是不是该改改名?...
  3. 机房合作--驼峰命名法
  4. 重庆邮电计算机科学分数线,2020重庆邮电大学录取分数线已公布
  5. es6 为什么修饰器不能用于函数
  6. python百度人脸识别_python 与 百度人脸识别api
  7. Python入门--with语句
  8. android studio unable to save settings,记一些:Android Studio 安装-运行 异常及解决
  9. 热的感觉是顺经络走的
  10. mapxtreme java_MapXtreme Java
  11. 8个免费和最佳开源视频流服务器软件
  12. rabbitmq报错An unexpected connection driver error occured
  13. 使用python制作时间戳转换工具
  14. WiFi大师3.0.9独立可运营版
  15. Android设置来电铃声和分享操作
  16. html中div排版布局
  17. face_recognition IndexError: list index out of range
  18. Cadence 17.4将状态栏由黑底白字改为白底黑字
  19. 边城科技“区块链+溯源”平台助力坪朗豆腐品牌升级
  20. k8s对node添加Label

热门文章

  1. Cygwin+NS2的安装过程及问题解决
  2. 分布式 - ElasticSearch解决大数据量检索难题
  3. 解读CUDA Compiler Driver NVCC - Ch.5
  4. CUBEMX STM32F105RB U盘读写详细教程
  5. Jupyter制作slides(幻灯片)
  6. 默认文献工具_极大提高效率:深度学习论文写作工具杂谈
  7. Qt实现多摄像头的识别、显示、截图、分辨率帧率设置等功能
  8. 数据库导出EXCEL后0丢失
  9. 【Numpy】选择特定行列
  10. 图书馆和档案馆的职能