亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于fastapi框架的異步解讀

 更新時間:2023年03月15日 08:48:39   作者:id老貓  
這篇文章主要介紹了基于fastapi框架的異步解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用fastapi框架開發(fā)web項目

1、為什么要用fastapi?

一直以來博主都是一直使用Django進行開發(fā)的,最近公司開始使用fastapi進行小項目的開發(fā)

通過博主對fastapi文檔的翻閱,發(fā)現(xiàn)fastapi最引人注意的就是他的異步支持。(當然最新版的django也已經(jīng)支持異步請求)

2、什么是異步?

異步相對應的就是同步

同步就是多件事排隊做

而異步就是多件事同時做

3、在django中是怎么實現(xiàn)異步的呢?

django采取的是多線程實現(xiàn)異步。

當一個線程在做耗時操作的時候進行線程間切換,給人一種多個線程在同時運行的感覺。(當然了,多核cpu確實是真正的多線程。)。

切換的同時不僅要重新獲取GIL鎖,還要重新加載和記住上下文,這些開銷對服務的性能是有一定影響的

4、fastapi中的異步

4.1 簡單介紹一下協(xié)程的概念

相信大家都聽說過協(xié)程這個概念,

協(xié)程是在一個線程間進行用戶級資源切換的概念

是不是很抽象?

我來解釋一下:

  • 首先我們要了解線程屬于進程,而協(xié)程屬于線程
  • 寫過爬蟲的同學應該了解過yield關(guān)鍵字,他就可以簡單的作為一個協(xié)程來用
  • 他可以構(gòu)造一個生成器,可能有些同學會把生成器和一個普通的可迭代對象混為一談(例如列表)

但是這又跟協(xié)程有什么關(guān)系呢?

是這樣的,當用戶要取一個元素的時候,這個生成器相當于被激活了,相當于開始占用線程資源,生成一個元素,返回之后就讓出線程資源,直到用戶取下一個元素。

這就是協(xié)程的思想:它沒有線程間切換時資源的消耗大,并且完全由用戶控制

4.2 fastapi中的協(xié)程

fastapi由較為完善的異步處理方案(沒有非常完善)

他的基本語法與flask較為相似(雖然博主只寫過一點flask)

值得一提的是asgi異步網(wǎng)關(guān)協(xié)議,這個網(wǎng)關(guān)協(xié)議有完善的異步請求與websocket的支持。

他對async/await有很好的支持

對應的web服務器是Uvicorn

我們可以使用sqlalchemy進行異步數(shù)據(jù)庫查詢

其實一個web項目的性能瓶頸大部分還是在io方面(數(shù)據(jù)庫查詢,web請求,系統(tǒng)io)

例如有些數(shù)據(jù)庫查詢確實耗時,我們又不想讓他阻塞當前線程,我們就可以使用異步數(shù)據(jù)庫查詢

fastapi會在你注明異步數(shù)據(jù)庫查詢的地方讓出cpu資源,讓他去處理別的東西(比如另一個請求)

然后當你的數(shù)據(jù)庫查詢結(jié)束返回之后,再次回到當初讓出資源的地方,繼續(xù)往下執(zhí)行。

5、協(xié)程相較于線程的優(yōu)勢

協(xié)程可以記住上下文,從而避免在線程間切換中針對上下文切換的資源消耗和關(guān)于GIL鎖的資源消耗

6、協(xié)程的使用場景

我們可以把計算機的動作大致分成兩種,一種是計算型,一種是io型,當一個任務是計算型的時候,就意味著cpu要一直運行,這個時候我們是沒法讓出cpu資源的,而當一個任務是io型的,就相當于cpu一直在休息,在等待,這個時候我們就可以讓出cpu的占用,讓他去處理別的任務

所以協(xié)程異步并不是所有場景都適用,他主要用于io場景。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用pandas對兩個dataframe進行join的實例

    使用pandas對兩個dataframe進行join的實例

    今天小編就為大家分享一篇使用pandas對兩個dataframe進行join的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 在Python中使用xlrd和xlwt讀寫Excel文件代碼實例

    在Python中使用xlrd和xlwt讀寫Excel文件代碼實例

    這篇文章主要介紹了在Python中使用xlrd和xlwt讀寫Excel文件代碼實例,python操作excel主要用到xlrd和xlwt兩個庫,即xlrd是讀excel,xlwt是寫excel庫,文中提供了部分實例代碼,需要的朋友可以參考下
    2023-08-08
  • Python tkinter分隔控件(Seperator)的使用

    Python tkinter分隔控件(Seperator)的使用

    這篇文章主要介紹了Python tkinter分隔控件(Seperator)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • python開發(fā)之IDEL(Python GUI)的使用方法圖文詳解

    python開發(fā)之IDEL(Python GUI)的使用方法圖文詳解

    這篇文章主要介紹了python開發(fā)之IDEL(Python GUI)的使用方法,結(jié)合圖文形式較為詳細的分析總結(jié)了Python GUI的具體使用方法,需要的朋友可以參考下
    2015-11-11
  • Python3讀取zip文件信息的方法

    Python3讀取zip文件信息的方法

    這篇文章主要介紹了Python3讀取zip文件信息的方法,涉及Python3 使用zipfile模塊操作zip文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 用python爬取今日說法每期數(shù)據(jù)

    用python爬取今日說法每期數(shù)據(jù)

    大家好,本篇文章主要講的是用python爬取今日說法每期數(shù)據(jù),感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • 使用Pandas選擇數(shù)據(jù)子集的方法示例

    使用Pandas選擇數(shù)據(jù)子集的方法示例

    有時數(shù)據(jù)讀入后并不是對整體數(shù)據(jù)進行分析,而是數(shù)據(jù)中的部分子集,所以,該如何根據(jù)特定的條件實現(xiàn)數(shù)據(jù)子集的獲取將是本節(jié)的主要內(nèi)容,本文給大家介紹了使用Pandas選擇數(shù)據(jù)子集的方法示例,需要的朋友可以參考下
    2024-03-03
  • 使用scrapy實現(xiàn)增量式爬取方式

    使用scrapy實現(xiàn)增量式爬取方式

    這篇文章主要介紹了使用scrapy實現(xiàn)增量式爬取方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • python黑魔法之參數(shù)傳遞

    python黑魔法之參數(shù)傳遞

    這篇文章主要介紹了python黑魔法之參數(shù)傳遞,分析了python參數(shù)傳遞的方法,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Python之日期與時間處理模塊(date和datetime)

    Python之日期與時間處理模塊(date和datetime)

    這篇文章主要介紹了Python之日期與時間處理模塊(date和datetime),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02

最新評論