基于fastapi框架的异步解读

 更新时间:2023年03月15日 08:48:39   作者:id老猫  
这篇文章主要介绍了基于fastapi框架的异步解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

使用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场景。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python买卖股票的最佳时机(基于贪心/蛮力算法)

    python买卖股票的最佳时机(基于贪心/蛮力算法)

    这篇文章主要介绍了python买卖股票的最佳时机(基于贪心/蛮力算法),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python反爬实战掌握酷狗音乐排行榜加密规则

    Python反爬实战掌握酷狗音乐排行榜加密规则

    最新的酷狗音乐反爬来袭,本文介绍如何利用Python掌握酷狗排行榜加密规则,本章内容只限学习,切勿用作其他用途!!!!! 有需要的朋友可以借鉴参考下
    2021-10-10
  • Python3开发环境搭建详细教程

    Python3开发环境搭建详细教程

    这篇文章主要介绍了Python3开发环境搭建详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • 如何使用Python读取.xlsx指定行列

    如何使用Python读取.xlsx指定行列

    读取xlsx的整列数据很容易,但是要读取指定sheet的指定列,这个相信大多数程序员都不会,下面这篇文章主要给大家介绍了关于如何使用Python读取.xlsx指定行列的相关资料,需要的朋友可以参考下
    2022-09-09
  • Python创建自己的加密货币的示例

    Python创建自己的加密货币的示例

    这篇文章主要介绍了Python创建自己的加密货币的示例,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-03-03
  • python编写五子棋游戏

    python编写五子棋游戏

    这篇文章主要为大家详细介绍了python编写五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • Python利用pdfplumber库提取pdf中表格数据

    Python利用pdfplumber库提取pdf中表格数据

    pdfplumber是一个用于从PDF文档中提取文本和表格数据的Python库,它可以帮助用户轻松地从PDF文件中提取有用的信息,例如表格、文本、元数据等,本文介绍了如何通过Python的pdfplumber库提取pdf中表格数据,感兴趣的同学可以参考一下
    2023-05-05
  • 浅谈Keras中shuffle和validation_split的顺序

    浅谈Keras中shuffle和validation_split的顺序

    这篇文章主要介绍了浅谈Keras中shuffle和validation_split的顺序,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python读取txt文件中特定位置字符的方法

    python读取txt文件中特定位置字符的方法

    今天小编就为大家分享一篇python读取txt文件中特定位置字符的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 使用selenium+chromedriver+xpath爬取动态加载信息

    使用selenium+chromedriver+xpath爬取动态加载信息

    这篇文章主要介绍了使用selenium+chromedriver+xpath爬取动态加载信息
    2022-02-02

最新评论