搜尋
首頁後端開發Python教學為什麼您的 FastAPI(或 Flask)應用程式在高負載下表現不佳

Why your FastAPI (or Flask) App performs poorly with high loads
首先,為標題誘餌道歉? ,但我昨晚解決了這個問題,而且我仍然受到多巴胺激增的影響。我只是想分享這個。

本文面向入門級開發人員或資料科學家(而不是高級Python 軟體工程師),我會將其寫為敘述性內容,或者換句話說,按照事件發生的時間順序排列,而不是“技術論文” (以問題、解決、討論為結構)。我喜歡這種方法,因為它顯示了現實生活中事情是如何發生的。

初步考慮

這些測試是在 GCP Cloud Run 上使用單處理器和 512M RAM 機器完成的,我們使用了 Locust,這是一個令人難以置信的工具(對於 Python,哈哈)。

此外,如果您在 Postman 上的單一請求上已經遇到效能問題,我強烈建議您看一下這個致力於提高 Kisspeter 的 FastAPI 效能的儲存庫以及來自 LoadForge 的這個儲存庫。

第一輪測試

在 Postman 中使用單一請求,Cloud Run 啟動後,我得到了大約 400 毫秒的回應時間。不是最好,但完全在可以接受的範圍內。

我們的負載測試非常簡單:在一個表中讀取、寫入和刪除(或對 API 端點進行 GET、POST 和 DELETE)。 75% 讀取,20% 寫入,5% 刪除。我們在 100 個並髮用戶的情況下運行 10 分鐘。

Why your FastAPI (or Flask) App performs poorly with high loads

最後我們得到了2 秒的平均反應時間,但最令人不安的部分是測試結束時平均時間仍在增加,因此在穩定之前(並且如果)該數字很可能仍會增加更多.

我嘗試在我的機器上本地運行它,但令我驚訝的是,Postman 的響應時間只有 14 毫秒。然而,當執行500個並髮用戶的負載測試時,問題又出現了? ...

Why your FastAPI (or Flask) App performs poorly with high loads

到測試結束時,回應時間約為1.6 秒,並且仍在增加,但出現了一些故障,第95 個百分位數飆升(並破壞了圖表=( )。以下是統計數據:

Why your FastAPI (or Flask) App performs poorly with high loads

現在,為什麼回應時間為 14 毫秒的伺服器在只有 500 個同時使用者的情況下突然達到 1.6 秒?

我的機器是酷睿 i7、6 核心、2.6GHz、16Gb RAM、SSD。這不應該發生。

給我一個很好的提示的是我的處理器和記憶體日誌......它們非常低!

這可能意味著我的伺服器沒有使用我機器上的所有資源。你猜怎麼著?事實並非如此。讓我向您介紹一個絕大多數開發人員在將 FastAPI 或 Flask 應用程式部署到生產環境時忘記的概念:流程工作人員。

根據 getorchestra.io:

了解伺服器工作者

伺服器工作人員本質上是運行應用程式程式碼的進程。每個工作人員一次只能處理一個請求。如果您有多個工作人員,您可以同時處理多個請求,從而提高應用程式的吞吐量。

為什麼伺服器工作人員很重要

  • 並發:它們允許並發處理請求,從而更好地利用伺服器資源並加快回應時間。
  • 隔離:每個worker都是獨立的進程。如果一名工作人員發生故障,不會影響其他工作人員,從而確保更好的穩定性。
  • 可擴充性:調整工作人員數量可以輕鬆擴展您的應用程式以處理不同的負載。

實際上,您所需要做的就是將可選的 --workers 參數新增到伺服器初始化行中。您需要多少工作執行緒的計算在很大程度上取決於運行應用程式的伺服器以及應用程式的行為:尤其是在記憶體消耗方面。

這樣做之後,我在本地為 16 個工作人員獲得了更好的結果,10 分鐘後收斂到 90 毫秒(對於 500 個並髮用戶):

Why your FastAPI (or Flask) App performs poorly with high loads

最後一輪測試

使用適當數量的工作執行緒配置微服務後(我的單處理器 Cloud Run 執行個體使用了 4 個),我在 GCP 中的結果非常好:

Why your FastAPI (or Flask) App performs poorly with high loads

在GCP伺服器測試結束時最終值收斂到300ms,至少是可以接受的。 ?

以上是為什麼您的 FastAPI(或 Flask)應用程式在高負載下表現不佳的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
了解差異:用於循環和python中的循環了解差異:用於循環和python中的循環May 16, 2025 am 12:17 AM

theDifferenceBetweewneaforoopandawhileLoopInpythonisthataThataThataThataThataThataThataNumberoFiterationSiskNownInAdvance,而leleawhileLoopisusedWhenaconDitionNeedneedneedneedNeedStobeCheckedStobeCheckedStobeCheckedStobeCheckedStobeceDrepeTysepectients.peatsiveSectlyStheStobeCeptellyWithnumberofiterations.1)forloopsareAceareIdealForitoringercortersence

Python循環控制:對於vs -a -a比較Python循環控制:對於vs -a -a比較May 16, 2025 am 12:16 AM

在Python中,for循環適用於已知迭代次數的情況,而while循環適合未知迭代次數且需要更多控制的情況。 1)for循環適用於遍歷序列,如列表、字符串等,代碼簡潔且Pythonic。 2)while循環在需要根據條件控制循環或等待用戶輸入時更合適,但需注意避免無限循環。 3)性能上,for循環略快,但差異通常不大。選擇合適的循環類型可以提高代碼的效率和可讀性。

如何在Python中結合兩個列表:5種簡單的方法如何在Python中結合兩個列表:5種簡單的方法May 16, 2025 am 12:16 AM

在Python中,可以通過五種方法合併列表:1)使用 運算符,簡單直觀,適用於小列表;2)使用extend()方法,直接修改原列表,適用於需要頻繁更新的列表;3)使用列表解析式,簡潔且可對元素進行操作;4)使用itertools.chain()函數,內存高效,適合大數據集;5)使用*運算符和zip()函數,適用於需要配對元素的場景。每種方法都有其特定用途和優缺點,選擇時應考慮項目需求和性能。

循環時循環:python語法,用例和示例循環時循環:python語法,用例和示例May 16, 2025 am 12:14 AM

foroopsare whenthenemberofiterationsisknown,而whileLoopsareUseduntilacTitionismet.1)ForloopSareIdealForeSequencesLikeLists,UsingSyntaxLike'forfruitinFruitinFruitinFruitIts:print(fruit)'。 2)'

python串聯列表列表python串聯列表列表May 16, 2025 am 12:08 AM

toConcateNateAlistofListsInpython,useextend,listComprehensions,itertools.Chain,orrecursiveFunctions.1)ExtendMethodStraightForwardButverBose.2)listComprechencomprechensionsareconconconciseandemandeconeandefforlargerdatasets.3)

Python中的合併列表:選擇正確的方法Python中的合併列表:選擇正確的方法May 14, 2025 am 12:11 AM

Tomergelistsinpython,YouCanusethe操作員,estextMethod,ListComprehension,Oritertools

如何在Python 3中加入兩個列表?如何在Python 3中加入兩個列表?May 14, 2025 am 12:09 AM

在Python3中,可以通過多種方法連接兩個列表:1)使用 運算符,適用於小列表,但對大列表效率低;2)使用extend方法,適用於大列表,內存效率高,但會修改原列表;3)使用*運算符,適用於合併多個列表,不修改原列表;4)使用itertools.chain,適用於大數據集,內存效率高。

Python串聯列表字符串Python串聯列表字符串May 14, 2025 am 12:08 AM

使用join()方法是Python中從列表連接字符串最有效的方法。 1)使用join()方法高效且易讀。 2)循環使用 運算符對大列表效率低。 3)列表推導式與join()結合適用於需要轉換的場景。 4)reduce()方法適用於其他類型歸約,但對字符串連接效率低。完整句子結束。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

北端:融合系統,解釋
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
4 週前By尊渡假赌尊渡假赌尊渡假赌
<🎜>掩蓋:探險33-如何獲得完美的色度催化劑
2 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用