色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Flask如何升級到 Quart 應用程序

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-01 16:23 ? 次閱讀

本文詳細介紹了典型的生產環境的 CRUD 應用程序從 Flask 到 Quart 的轉換,并展示相關的性能改進優勢。

將這個 Flask-pyscopg2 應用程序升級到 Quart-asyncpg 應用程序可以提高 3 倍的性能,而且不需要對代碼進行重大的重寫或調整。

圖片

如上所示,在針對單個資源詳情的請求下,Flask每秒請求為330個,而quart能達到1160個。以此類推,Quart 相比于 Flask 平均性能提高3倍。

這個比較,我使用了一個簡單的只提供一個 RESTful 接口的應用程序,這是微服務架構中的常見用例。

該應用程序有三個路由。這些路由分別是:

  • 單個電影詳情:GET /films/pk/
  • 所有電影:GET /films/
  • 添加新評論:POST /reviews/

源代碼可以在以下網址找到:
https://github.com/pgjones/faster_than_flask_article

有兩個 commit ,分別是一個 Flask 版本和一個Quart 版本。

1. 從 Flask 到 Quart

從 Flask 改用 Quart 很容易,只需要一點點改變,特別是 from flask 改為 from quart,函數變成異步函數。

def add_review():
    data = request.get_json()
    ...

變成

async def add_review():
    data = await request.get_json()
    ...

**

2.數據庫連接,從 psycopg2 到 asyncpg**

從 psycopg2 改用 asyncpg 比較麻煩,因為兩者有不同的用法。

為了簡化區別,我們在 Flask 應用程序中使用了 PoolWrapper,使得 psycopg2 可以使用與 asyncpg 相同的 API 進行上下文管理,即:

with pool.acquire() as connection:

這將允許通過with更改為async with來使用asyncpg。

當然,除了連接之外,Asyncpg和psycopg2還在游標使用、事務、執行參數和查詢格式方面存在差異。這些差異是你在遷移過程中需要注意的。

3.部署

Flask 應用程序往往不能直接在生產環境中直接暴露給用戶,這是因為Flask 本身一次只能處理一個請求。因此,常常用WSGI服務器與某種異步 worker 結合使用,例如 帶 eventlet 的Gunicorn。

Quart 也可以用 Gunicorn 部署,它允許使用相同的命令來運行 Flask 和 Quart 應用程序:

$ gunicorn --config gunicorn.py 'run:create_app()'
針對 Flask 和 Quart 的性能測試是基于 Gunicorn 進行的。

4.添加測試數據

除了添加一個簡單的 review 表之外,Postgresql 示例數據庫還要為應用程序提供一些用于 CRUD的數據。

CREATE TABLE review (
    film_id INTEGER REFERENCES film(film_id),
    rating INTEGER
);

5.性能測試

為了測量應用程序的性能,我們使用了wrk。它被配置為使用20個連接,以匹配數據庫連接池的大小(確保最高的吞吐量,20是我使用過的典型值)。命令如下:

測試 GET 請求的命令是

$ wrk --connections 20 --duration 5m http://localhost:5000/${PATH}/

測試 POST 請求的命令是

$ wrk --connections 20 --duration 5m --script post.lua http://localhost:5000/${PATH}/

測試使用的 post.lua 文件如下:

wrk.method = "POST"
wrk.body = '{"film_id": 995, "rating": 4}'
wrk.headers["Content-Type"] = "application/json"

6.系統信息與結果

系統信息:

Postgres (9.5.10),wrk (4.0.0),Python (3.6.3),asyncpg (0.13.0),Flask (0.12.2),Gunicorn (19.7.1),psycopg2 (2.7.3.2), Quart (0.3.1)

全部運行在一臺 AWS c4.large 機器上。

結果

圖片

請注意,Quart 服務器的平均等待時間減少了 2 至 3.5 倍,每秒的請求數量增加了 2 至 3.5 倍。

7.結論

Flask 應用程序升級到 Quart 應用程序是相當簡單的,因為大部分 API 是共享的,所以主要工作就是在正確的位置寫asyncawait。然而,如果使用 SQLAlchemy(或其他 ORM),則從psycopg2 到 asyncpg 的改變會比較復雜,并且可能會很麻煩。

這個 demo 應用程序的性能顯著提高,這個改進主要是由于 Quart 使用了 asyncpg 和 uvloop,據估計,僅 Quart 就能提供 1.5 倍的提升。

總之,從 Flask-psycopg2 應用程序升級到 Quart-asyncpg 應用程序的比較簡單,并擁有非常合理的性能改進。這可能會擴展到其他基于 asyncio 的庫,意味著將 Flask 應用程序轉換到 asyncio 生態系統,Quart 只需要很小的工作量。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8691

    瀏覽量

    151707
  • 應用程序
    +關注

    關注

    38

    文章

    3292

    瀏覽量

    57849
  • flask
    +關注

    關注

    0

    文章

    16

    瀏覽量

    3628
收藏 人收藏

    評論

    相關推薦

    如何把iPhone OS升級到3.1.3

    如何把iPhone OS升級到3.1.3 在此請各位已經越獄的iPhone用戶奔走相告:千萬不要一
    發表于 02-08 09:20 ?1591次閱讀

    ESP8266 12E如何升級到最新固件?

    ESP8266 12E如何升級到最新固件
    發表于 07-22 07:03

    如何讓KeilUlink升級到ULINK2

    如何讓KeilUlink升級到ULINK2
    發表于 02-12 20:05

    FatFS升級到0.12c版本

    FatFS升級到0.12c版本
    發表于 03-31 11:03

    升級到352.70

    嗨 - 這是我們當前的版本:Esxi vGPU經理= 346.58贏7 = 348.27我們正在嘗試升級到當前版本:Esxi-352.70贏7/8-354.56遇到問題。我將Esxi方面升級到
    發表于 09-07 16:47

    labview怎么從2015升級到2017

    labview怎么從2015升級到2017?
    發表于 03-15 16:31

    無線升級到802.11n的考慮因素

    的問題"是否升級到新的標準下,以及什么時間、以什么樣的方式升級"。下面內容將指出升級到802.11n應該考慮哪些因素來最大化利益,最大化遷移帶來的影響。
    發表于 07-16 06:17

    Mac升級到1012基礎編譯無法工作

    Mac 升級到1012 出現的各種問題解決
    發表于 03-23 11:17

    升級到Windows7的理由是什么?

    升級到Windows7的理由是什么?
    發表于 04-28 06:28

    MounRiver升級到1.82,固件升級后提示錯誤怎么解決?

    如題。芯片是CH582. 一直用得好好的。今天MounRiver升級到1.82,問我要不要升級WCH-link固件。我隨便說要(嚴重錯誤!!)。固件升級后調試時出現如下提示:馬上要交功課了。在線等解決方法。
    發表于 09-29 07:16

    iphone4升級5.1.1教程_iphone4如何升級到ios5

    iphone4如何升級到ios5?iphone4升級到ios5.1.1教程,iphone4怎么升級到ios5,小編在這里為大家介紹了iphone4升級到ios5的方法
    發表于 09-18 09:48 ?5w次閱讀
    iphone4<b class='flag-5'>升級</b>5.1.1教程_iphone4如何<b class='flag-5'>升級到</b>ios5

    怎樣創建樹莓派上的Web應用程序 并使用Flask Web Framework控制伺服電機

    在這篇文章中,您將學習如何創建Raspberry Pi上的Web應用程序,使用Flask Web Framework控制伺服電機,以創建Web應用程序。我們將在Web應用程序上創建兩個
    的頭像 發表于 07-26 15:27 ?6658次閱讀

    使用Python和Flask開發一個Web程序

    Flask 是一個使用 Python 語言編寫的 Web 框架,它可以讓你高效的編寫 Web 程序。Web 程序即“網站”或“網頁程序”,是指可以通過瀏覽器進行交互的
    發表于 02-28 08:00 ?0次下載

    在Python中使用Flask運行的Web應用程序來模擬鋼琴

    電子發燒友網站提供《在Python中使用Flask運行的Web應用程序來模擬鋼琴.zip》資料免費下載
    發表于 11-28 09:29 ?2次下載
    在Python中使用<b class='flag-5'>Flask</b>運行的Web<b class='flag-5'>應用程序</b>來模擬鋼琴

    升級到TVP5147M1

    電子發燒友網站提供《升級到TVP5147M1.pdf》資料免費下載
    發表于 09-30 09:08 ?0次下載
    <b class='flag-5'>升級到</b>TVP5147M1
    主站蜘蛛池模板: 国产亚洲精品精华液 | 我和妽妽在厨房里的激情区二区 | 最近免费中文字幕完整版HD | 中文字幕a有搜索网站 | 欧美成人无码A区在线观看免费 | 国产视频www | 国产精品高清免费网站 | 国产成人综合95精品视频免费 | 大胆国模一区二区三区伊人 | 国产精品一区二区AV97 | 天堂so导航 | 国产AV国产精品国产三级在线L | 日韩人妻无码精品-专区 | 亚洲日本欧美天堂在线 | 在线成年av动漫电影 | 久久精品国产久精国产果冻传媒 | 国产精品久久久久影院免费 | 亚洲欧美自拍清纯中文字幕 | 色噜噜狠狠一区二区三区 | 无码成人AAAAA毛片含羞草 | 91伊人久久大香线蕉 | 伊人久久五月丁婷婷 | 国产高清视频免费在线观看 | 草699一码二码三码四码 | 久久伊人影视 | 91嫩草国产在线观看免费 | 国产精品JIZZ在线观看A片 | 九九久久精品国产 | 91嫩草私人成人亚洲影院 | 香蕉免费高清完整 | 国产精品国产三级国AV在线观看 | 国产传媒麻豆剧精品AV | 恋夜秀场支持安卓版全部视频国产 | 高h肉肉乳共妻 | 久久综合老色鬼网站 | 成人高清网站 | 高清国产在线观看 | 在线自拍综合亚洲欧美 | 高清国产免费观看视频在线 | 国产亚洲精品久久久无码狼牙套 | 亚洲精品成人无码区一在线观看 |