最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于fastapi框架的異步解讀

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

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

1、為什么要用fastapi?

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

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

2、什么是異步?

異步相對應(yīng)的就是同步

同步就是多件事排隊做

而異步就是多件事同時做

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

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

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

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

4、fastapi中的異步

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

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

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

是不是很抽象?

我來解釋一下:

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

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

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

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

4.2 fastapi中的協(xié)程

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

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

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

他對async/await有很好的支持

對應(yīng)的web服務(wù)器是Uvicorn

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

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

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

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

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

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

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

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

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

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

總結(jié)

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

相關(guān)文章

  • Python中的datetime包與time包包和模塊詳情

    Python中的datetime包與time包包和模塊詳情

    這篇文章主要介紹了Python中的datetime包與datetime包和模塊詳情,文章圍繞主題展開詳細內(nèi)容,具有一的的參考價值,需要的小伙伴可以參考一下,希望對你有所幫助
    2022-02-02
  • Python+OpenCV手勢檢測與識別Mediapipe基礎(chǔ)篇

    Python+OpenCV手勢檢測與識別Mediapipe基礎(chǔ)篇

    網(wǎng)上搜到了一些關(guān)于手勢處理的實驗,我在這兒簡單的實現(xiàn)一下,下面這篇文章主要給大家介紹了關(guān)于Python+OpenCV手勢檢測與識別Mediapipe基礎(chǔ)篇的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Python函數(shù)式編程實例詳解

    Python函數(shù)式編程實例詳解

    這篇文章主要介紹了Python函數(shù)式編程,結(jié)合實例形式詳細分析了Python函數(shù)式編程高階函數(shù)、匿名函數(shù)、閉包及函數(shù)裝飾器等相關(guān)概念、原理與使用技巧,需要的朋友可以參考下
    2020-01-01
  • Python中函數(shù)帶括號和不帶括號的區(qū)別及說明

    Python中函數(shù)帶括號和不帶括號的區(qū)別及說明

    這篇文章主要介紹了Python中函數(shù)帶括號和不帶括號的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • python中二維陣列的變換實例

    python中二維陣列的變換實例

    這篇文章主要介紹了python中二維陣列的變換實例,通過對比兩種不同的方法分析了二維陣列變換的實現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • python高級特性和高階函數(shù)及使用詳解

    python高級特性和高階函數(shù)及使用詳解

    Python很棒,它有很多高級用法值得細細思索,學(xué)習(xí)使用。這篇文章主要介紹了python高級特性和高階函數(shù)及使用詳解,需要的朋友可以參考下
    2018-10-10
  • Ubuntu手動編譯源碼安裝Python的詳細過程

    Ubuntu手動編譯源碼安裝Python的詳細過程

    這篇文章主要介紹了Ubuntu手動編譯源碼安裝Python的詳細過程,在python官網(wǎng)找到所需版本的python安裝包,下載到Ubuntu系統(tǒng)中,需要的朋友可以參考下
    2006-08-08
  • 模型訓(xùn)練時GPU利用率太低的原因及解決

    模型訓(xùn)練時GPU利用率太低的原因及解決

    這篇文章主要介紹了模型訓(xùn)練時GPU利用率太低的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python 中的@property的用法詳解

    python 中的@property的用法詳解

    這篇文章主要介紹了python @property的用法,簡單地說就是一個類里面的方法一旦被@property裝飾,就可以像調(diào)用屬性一樣地去調(diào)用這個方法,它能夠簡化調(diào)用者獲取數(shù)據(jù)的流程,感興趣的朋友跟隨小編一起看看吧
    2022-06-06
  • Python學(xué)習(xí)之不同數(shù)據(jù)類型間的轉(zhuǎn)換總結(jié)

    Python學(xué)習(xí)之不同數(shù)據(jù)類型間的轉(zhuǎn)換總結(jié)

    類型轉(zhuǎn)換,就是將自身的數(shù)據(jù)類型變成新的數(shù)據(jù)類型,并擁有新的數(shù)據(jù)類型的所有功能的過程。本文將詳細為大家介紹如何在Python中實現(xiàn)不同數(shù)據(jù)類型的轉(zhuǎn)換,感興趣的可以了解一下
    2022-03-03

最新評論

大连市| 新丰县| 土默特左旗| 贞丰县| 德钦县| 乌鲁木齐市| 扎赉特旗| 平阳县| 濉溪县| 密山市| 古交市| 西城区| 普兰县| 陇川县| 宁阳县| 秭归县| 卢龙县| 海原县| 广灵县| 新和县| 东乌| 赤水市| 盱眙县| 青铜峡市| 西华县| 屯门区| 娄底市| 敖汉旗| 陆川县| 确山县| 墨玉县| 鄄城县| 黑山县| 唐河县| 葵青区| 朝阳县| 平顶山市| 岐山县| 壶关县| 石狮市| 涟源市|