簡體   English   中英

只有異步端點的 FastAPI 應用程序會遇到 GIL 問題嗎?

[英]Will FastAPI application with only async endpoints encounter the GIL problem?

如果所有 fastapi 端點都定義為async def ,那么只有 1 個線程在運行,對嗎? (假設一個 uvicorn 工人)。

只是想在這樣的設置中確認,我們永遠不會碰到 python 的全局解釋器鎖。 如果要在具有多個線程的燒瓶框架中為單個 gunicorn worker 執行相同的操作,那么我們將面臨阻礙線程之間真正並行性的 GIL。

所以基本上,在上面的 fastapi 中,並行度被限制為 1,因為只有一個線程。 為了利用所有核心,我們需要增加使用 gunicorn 或 uvicorn 的工人數量。

我的理解正確嗎?

你的理解是正確的。 當使用 1 名工人和 uvicorn 時,只運行一個進程。 這意味着,只有一個線程可以鎖定正在運行您的應用程序的解釋器。 由於 FastAPI 應用程序的異步特性,它將能夠處理多個同時請求,但不能並行處理。

如果您希望應用程序的多個實例並行運行,您可以增加您的工作人員。 這將啟動多個進程(如上所有單線程),Uvicorn 將在它們之間分配請求。

請注意,您不能在工作人員之間共享全局變量。 這些是您的 FastAPI 應用程序的單獨實例,並且不會相互通信。 有關此問題以及如何使用數據庫或緩存來解決此問題的更多信息,請參閱此答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM