91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于fastapi框架的異步怎么使用

發布時間:2023-03-15 09:52:30 來源:億速云 閱讀:242 作者:iii 欄目:開發技術

本篇內容主要講解“基于fastapi框架的異步怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“基于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場景。

    到此,相信大家對“基于fastapi框架的異步怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    光山县| 来安县| 耒阳市| 景谷| 兴义市| 积石山| 山东省| 攀枝花市| 宜州市| 北碚区| 平武县| 横山县| 洞口县| 五寨县| 个旧市| 新昌县| 永昌县| 博兴县| 门源| 红河县| 铁力市| 津市市| 马尔康县| 土默特右旗| 同江市| 泰和县| 漳州市| 浦城县| 河池市| 阳新县| 慈溪市| 尚志市| 寻甸| 弥渡县| 刚察县| 西贡区| 安岳县| 博兴县| 司法| 仙桃市| 安达市|