在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

Flask如何升級到 Quart 應用程序

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

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

將這個 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 比較麻煩,因為兩者有不同的用法。

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

with pool.acquire() as connection:

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

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

3.部署

Flask 應用程序往往不能直接在生產環(huán)境中直接暴露給用戶,這是因為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.系統(tǒng)信息與結果

系統(tǒng)信息:

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 生態(tài)系統(tǒng),Quart 只需要很小的工作量。

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

    關注

    33

    文章

    8600

    瀏覽量

    151166
  • 應用程序
    +關注

    關注

    37

    文章

    3268

    瀏覽量

    57710
  • flask
    +關注

    關注

    0

    文章

    16

    瀏覽量

    3614
收藏 人收藏

    評論

    相關推薦

    如何把iPhone OS升級到3.1.3

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

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

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

    如何讓KeilUlink升級到ULINK2

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

    FatFS升級到0.12c版本

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

    升級到352.70

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

    labview怎么從2015升級到2017

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

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

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

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

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

    升級到Windows7的理由是什么?

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

    如何把linux默認的4.1.15內核升級到4.9.88?

    各位大俠,知道怎么把當前默認的4.1.15內核升級到4.9.88的方法么?我現在用的是imx6 Q核心板。
    發(fā)表于 01-10 07:26

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

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

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

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

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

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

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

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

    升級到TVP5147M1

    電子發(fā)燒友網站提供《升級到TVP5147M1.pdf》資料免費下載
    發(fā)表于 09-30 09:08 ?0次下載
    <b class='flag-5'>升級到</b>TVP5147M1
    主站蜘蛛池模板: 三级国产在线观看| 久久福利青草精品资源站免费| 免费视频播放| 在线 | 一区二区三区| 亚洲人在线| 狠狠综合| 两人性潮高免费视频看| 看a网站| 男人的天堂视频在线| 天天干天天拍天天射 | 69日本xxxxxxxxx29| 婷婷爱爱| 毛片资源网| 97人人做人人爱| 国外免费精品视频在线观看| 中文字幕一区二区精品区| 色多视频| 天天夜夜操| kkkbo色综合| 国产亚洲综合色就色| 成人影院在线观看视频| 久久久久国产成人精品亚洲午夜| 男人的天堂在线精品视频| 九草伊人| 婷婷六月综合| 午夜性福| 国产在线精品观看一区| 韩国三级在线不卡播放| 日本污全彩肉肉无遮挡彩色| 二区中文字幕| 成人精品在线观看| 国产国拍亚洲精品mv在线观看 | 精品三级三级三级三级三级| 精品国产一二三区| 婷婷激情综合| 天天干天操| 亚洲精品第一| 韩国r天堂| 中文字幕第二区| 久久久免费视频观看| 综合7799亚洲伊人爱爱网|