首頁 > 後端開發 > Python教學 > 為什麼我的 FastAPI 應用程式按順序而不是並行處理並發請求?

為什麼我的 FastAPI 應用程式按順序而不是並行處理並發請求?

Linda Hamilton
發布: 2025-01-01 01:12:09
原創
618 人瀏覽過

Why Does My FastAPI Application Process Concurrent Requests Sequentially Instead of in Parallel?

FastAPI 以串行方式而不是並行方式執行API 呼叫

問題陳述:

問題陳述:

FastAPI 提供並行功能,但API透過多個瀏覽器標籤同時發出的呼叫將依序而不是並行處理。當使用 def 而不是 async def 定義端點時,就會出現此行為。

分析與解決方案:

FastAPI 利用外部執行緒池來處理使用 def 定義的端點。當此類端點收到請求時,FastAPI 在執行緒池之外的單獨執行緒中執行它。然而,一次只能處理一個請求,導致順序請求處理而不是真正的並行性。

@app.get("/ping")
async def ping(request: Request):
    print("Hello")
    await asyncio.sleep(5)
    print("bye")
    return {"ping": "pong!"}
登入後複製
相反,使用 async def 定義的端點直接在主事件循環中執行,從而允許真正的並行請求處理。這是因為在等待非同步操作時,async def 端點中的等待呼叫會屈服於事件循環中的其他任務。

要解決此問題,請確保定義不需要阻塞 I/O 綁定操作的端點使用 async def 來利用 FastAPI 的平行功能。以下是可以並行執行的端點範例:

  • 其他見解:
  • 阻塞操作,例如time.sleep(),在async def 端點中,將阻塞整個伺服器,呈現並行處理的好處
  • CPU 密集型任務或阻塞I/O 操作可以使用 run_in_threadpool()、loop.run_in_executor()、ThreadPoolExecutor 或 ProcessPoolExecutor 等技術在單獨的執行緒或進程中執行。
增加worker(進程)數量可以增強並發性並服務更多請求對於繁重的後台計算,請考慮使用 apscheduler 中的 Celery 或 AsyncIOScheduler 等工具。

以上是為什麼我的 FastAPI 應用程式按順序而不是並行處理並發請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板