在 FastAPI 端點使用 Concurrent.futures.ThreadPoolExecutor 有風險嗎?
問題陳述:
在提供的測試程式碼中,ThreadPoolExecutor 用於同時從多個網站擷取資料。令人擔憂的是,在 FastAPI 端點中使用此方法可能會導致過多的執行緒建立和資源匱乏和應用程式崩潰等潛在問題。
問題與潛在問題:
- 執行緒耗盡:建立太多執行緒會耗盡系統的執行緒池,導致執行緒匱乏並可能導致應用程式或主機崩潰。
- 資源爭用:執行緒會爭奪系統資源,例如記憶體和 CPU,這會降低應用程式的速度並影響效能。
- 同步性:在多執行緒環境中管理執行緒之間的同步可能會很複雜,而且引入潛在的競爭條件。
建議解決方案:使用 HTTPX 函式庫
建議使用 HTTPX 函式庫,而不是使用 ThreadPoolExecutor,它提供了非同步 API。 HTTPX 提供了許多優點:
- 非同步操作: HTTPX 非同步工作,可以在不阻塞執行緒池的情況下高效處理並發請求。
- 連線池管理:它會自動管理連線池,確保連線被重複使用並限制活動連線的數量。
- 細微控制:HTTPX允許自訂連線限制和逾時,提供對資源使用的精確控制。
- 與 FastAPI 的簡化整合:FastAPI 可以利用框架提供的非同步支援與 HTTPX 無縫整合。
工作範例:
from fastapi import FastAPI, Request from contextlib import asynccontextmanager import httpx import asyncio URLS = ['https://www.foxnews.com/', 'https://edition.cnn.com/', 'https://www.nbcnews.com/', 'https://www.bbc.co.uk/', 'https://www.reuters.com/'] @asynccontextmanager async def lifespan(app: FastAPI): # Customise settings limits = httpx.Limits(max_keepalive_connections=5, max_connections=10) timeout = httpx.Timeout(5.0, read=15.0) # 5s timeout on all operations # Initialise the Client on startup and add it to the state async with httpx.AsyncClient(limits=limits, timeout=timeout) as client: yield {'client': client} # The Client closes on shutdown app = FastAPI(lifespan=lifespan) async def send(url, client): return await client.get(url) @app.get('/') async def main(request: Request): client = request.state.client tasks = [send(url, client) for url in URLS] responses = await asyncio.gather(*tasks) return [r.text[:50] for r in responses] # For demo purposes, only return the first 50 chars of each response
此程式碼片段示範如何使用HTTPX 和FastAPI 來非同步處理並發請求,有效緩解與執行緒耗盡和資源爭用相關的問題。
以上是在 FastAPI 端點使用 `concurrent.futures.ThreadPoolExecutor` 有風險嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

本文解釋瞭如何使用美麗的湯庫來解析html。 它詳細介紹了常見方法,例如find(),find_all(),select()和get_text(),以用於數據提取,處理不同的HTML結構和錯誤以及替代方案(SEL)

本文比較了Tensorflow和Pytorch的深度學習。 它詳細介紹了所涉及的步驟:數據準備,模型構建,培訓,評估和部署。 框架之間的關鍵差異,特別是關於計算刻度的

本文指導Python開發人員構建命令行界面(CLIS)。 它使用Typer,Click和ArgParse等庫詳細介紹,強調輸入/輸出處理,並促進用戶友好的設計模式,以提高CLI可用性。

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

文章討論了虛擬環境在Python中的作用,重點是管理項目依賴性並避免衝突。它詳細介紹了他們在改善項目管理和減少依賴問題方面的創建,激活和利益。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版
視覺化網頁開發工具