首頁 雲端運算與程式碼文章正文

如何在Uvicorn中配置FastAPI應用

雲端運算與程式碼 2024年09月23日 21:38 2.5K+ 品悟

Uvicorn是一個輕量級的ASGI服務器,可與多個Python Web框架集成,如FastAPI、Starlette、Quart等。除了FastAPI,Uvicorn還能與Starlette(輕量級ASGI框架)、Sanic(通過特定配置)和Quart(異步Flask風格框架)等集成,提供靈活高效的Web服務部署選項。

以下是在Uvicorn中配置FastAPI應用的方法:

一、基本配置

如何在Uvicorn中配置FastAPI應用 第1张

1. 安裝所需庫

   - 確保已經安裝了 `fastapi` 和 `uvicorn`。可以使用以下命令進行安裝:

     pip install fastapi uvicorn

2. 創建FastAPI應用

   - 創建一個Python文件,例如 `main.py`,並在其中創建一個FastAPI應用實例:   

from fastapi import FastAPI
     app = FastAPI()

3. 啟動Uvicorn

   - 在命令行中使用以下命令啟動Uvicorn服務器來運行FastAPI應用:

     uvicorn main:app --reload

   - 這裏的 `main` 是包含 `app` 實例的模塊名稱,`app` 是 FastAPI 應用實例的名稱。`--reload` 參數表示在代碼修改後自動重新加載服務器,這在開發過程中非常有用。

二、高級配置

1. 指定主機和端口

   - 可以使用 `--host` 和 `--port` 參數指定服務器監聽的主機和端口。例如:

     uvicorn main:app --host 0.0.0.0 --port 8000

   - 這將使服務器在所有網絡接口上監聽端口 8000。

2. 配置工作進程數

   - 使用 `--workers` 參數可以指定服務器的工作進程數。例如:

     uvicorn main:app --workers 4

   - 增加工作進程數可以提高服務器的並發處理能力,但也要根據服務器的資源和負載情況進行調整。

3. 設置日誌級別

   - 使用 `--log-level` 參數可以設置日誌級別。例如:

     uvicorn main:app --log-level info

   - 可選的日誌級別有 `debug`、`info`、`warning`、`error` 和 `critical`。

4. 配置 SSL

   - 如果需要使用 SSL 加密,可以使用 `--ssl-keyfile` 和 `--ssl-certfile` 參數指定 SSL 密鑰和證書文件的路徑。例如:

     uvicorn main:app --ssl-keyfile /path/to/key.pem --ssl-certfile /path/to/cert.pem

5. 自定義配置類

   - FastAPI 允許你創建一個自定義的配置類來進一步配置應用。你可以在應用的構造函數中傳入這個配置類的實例。例如: 

from fastapi import FastAPI
     from pydantic import BaseSettings
     class AppSettings(BaseSettings):
         debug: bool = False
     settings = AppSettings()
     app = FastAPI()
     # 根據配置進行一些設置
     if settings.debug:
         # 在調試模式下的設置
         pass
     else:
         # 在生產模式下的設置
         pass

    - 然後在啟動 Uvicorn 時,可以通過環境變量或命令行參數來設置配置類中的屬性。例如,使用環境變量設置 `debug` 屬性為 `True`:

     DEBUG=True uvicorn main:app

通過以上方法,你可以根據自己的需求在 Uvicorn 中靈活配置 FastAPI 應用。

除了FastAPI,Uvicorn 還可以和哪些框架集成?

除了FastAPI,Uvicorn還可以和以下框架集成:

一、Starlette

Starlette 本身就是一個輕量級的ASGI框架,Uvicorn可以很好地與Starlette配合使用。你可以使用Uvicorn來運行基於 Starlette 構建的 Web 應用程序。例如:

from starlette.applications import Starlette
from starlette.responses import PlainTextResponse
app = Starlette()
@app.route("/")
async def homepage(request):
    return PlainTextResponse("Hello, world!")

然後使用Uvicorn啟動這個應用:`uvicorn filename:app`。

二、Sanic

雖然Sanic主要使用其自身的服務器,但也可以通過安裝 `uvicorn` 和 `asgiref` 庫來使用Uvicorn運行Sanic應用。需要註意的是,這種方式可能不是官方推薦的主要部署方式,但在某些特定情況下可以使用。

from sanic import Sanic
from sanic.response import text
app = Sanic("MyApp")
@app.route("/")
async def index(request):
    return text("Hello, world!")

然後可以嘗試使用 Uvicorn 啟動:`uvicorn sanic_app:app`(假設上述代碼保存在文件名為`sanic_app.py`中)。

三、Quart

Quart是一個異步的Flask風格的Web框架,遵循ASGI規範,所以可以很好地與Uvicorn集成。

from quart import Quart
app = Quart(__name__)
@app.route('/')
async def hello():
    return 'Hello, World!'

啟動方式類似其他應用:`uvicorn quart_app:app`(假設代碼保存在文件名為`quart_app.py`中)。

標籤: 使用 Uvicorn app 配置 應用 FastAPI

AmupuCopyright Amupu.Z-Blog.Some Rights Reserved.