首頁 >後端開發 >Python教學 >為什麼 FastAPI 以串行方式而不是並行方式運行 API 呼叫?

為什麼 FastAPI 以串行方式而不是並行方式運行 API 呼叫?

Linda Hamilton
Linda Hamilton原創
2024-12-27 20:24:10509瀏覽

Why Does FastAPI Run API Calls Serially Instead of in Parallel?

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

問:為什麼 FastAPI API 呼叫以串行方式而不是並行方式運行?

A:根據FastAPI的文檔,當使用def 代替async def 定義路徑操作函數,它在外部線程池中運行,然後等待,而不是直接呼叫。這樣做是為了防止阻塞伺服器。

其他並行執行的注意事項:

非同步def 與def 端點:

  • 函數直接執行事件循環;只要它們等待非阻塞I/O 綁定操作,就會同時處理。
def:

函數在與外部執行緒池分開的執行緒中運行;將串列處理,除非在事件循環之外執行。

使用阻塞操作:

如果 async def端點包含阻塞操作並且不等待完成後,它將阻塞事件循環並處理請求

    解決方案:
  • 使用普通def 而不是async def 定義端點(如果沒有可等待的操作)。
  • 使用FastAPI的run_in_threadpool()函式在單獨的執行緒中執行阻塞任務

使用asyncio的loop.run_in_executor()或asyncio.to_thread()在單獨的執行器或執行緒中執行阻塞任務。

    其他最佳化策略:
  • 使用更多工人來利用多核心 CPU。
考慮使用 Celery 或 AsyncIOScheduler 進行繁重的背景計算。

以上是為什麼 FastAPI 以串行方式而不是並行方式運行 API 呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn