精品一区二区三区在线成人,欧美精产国品一二三区,Ji大巴进入女人66h,亚洲春色在线视频

FastAPI 實戰秘籍:從零構建高性能 API -配置篇

開發
?有關注朋友讓我講解一下fastapi?進行web?開發的教程,今天講講一下FastAPI項目的配置。

有關注朋友讓我講解一下fastapi進行web開發的教程,從今天分幾期講講一下fastapi項目的搭建。

官方文檔:https://fastapi.tiangolo.com/zh/

每個項目大多會有獨立于代碼外的配置文件,比如傳統軟件.ini配置,web開發的yaml或toml配置等。配置文件獨立能夠避免硬編碼,避免每次修改都要重啟服務。更好的團隊協作,敏感信息泄露等。

具體學習可查看代碼地址入選: https://github.com/pyzxs/zadmin。

我們使用pydantic_settings及PyYAML庫作為配置管理:

pip install pydantic-settings pyyaml

配置文件

在config目錄下存在config.dev.yml, 把git中的config.dev.yml拷貝為config.yml。

下面是實現配置調用的代碼如下:

# config/config.py

import os
from typing import Dict, Any, Optional
from typing import List

import yaml
from pydantic import BaseModel
from pydantic_settings import BaseSettings

# 根目錄地址
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

模型定義:

# config/config.py

# 子模型定義
class AppConfig(BaseModel):
    name: str
    version: str = "1.0"
    host: str = "0.0.0.0"
    port: int = 8000
    debug: bool = False
    secret_key: str
    allowed_origins: List[str] = []


class DatabaseConfig(BaseModel):
    url: str
    async_url: str
    pool_size: int = 10
    echo_sql: bool = False


class RedisConfig(BaseModel):
    host: str = "localhost"
    port: int = 6379
    password: str = ""
    db: int = 0


class LoggingConfig(BaseModel):
    level: str = "INFO"
    log_path: str = "logs/app.log"
    rotation: str = "10 MB"


# 主配置模型
class Settings(BaseSettings):
    app: AppConfig
    database: DatabaseConfig
    redis: RedisConfig
    logging: LoggingConfig

配置文件加載及初始數據類:

#config/config.py

# 全局緩存
_cached_config: Optional[Dict[str, Any]] = None
_cached_mtime: Optional[float] = None


def load_yaml_config_with_cache(file_path: str) -> Dict[str, Any]:
    global _cached_config, _cached_mtime
    current_mtime = os.path.getmtime(file_path)
    if _cached_config isNoneor current_mtime != _cached_mtime:
        print("讀取配置文件")
        with open(file_path, "r", encoding="UTF-8") as f:
            _cached_config = yaml.safe_load(f)
            _cached_mtime = current_mtime
    return _cached_config



def get_settings() -> Settings:
    file_path = os.path.join(BASE_DIR, "config/config.yml")
    config_data = load_yaml_config_with_cache(file_path)
    return Settings(**config_data)

在上面代碼中增加全局緩存,避免每次調用get_settings都進行io操作。

而且緩存在內存中, 每個服務重啟都會自動清理掉。

測試配置文件效果:

# 測試
if __name__ == "__main__":
    print(BASE_DIR)
    settings1 = get_settings()  # 第一次加載
    settings2 = get_settings()  # 從緩存讀取
    print(settings1 == settings2)  # True


# 運行測試 python config.py
讀取配置文件
True

入口文件及啟動

在根目錄下的main.py我們通過uvicorn作為 ASGI 服務器:

pip install fastapi uvicorn[standard]

代碼如下:

# main.py

import uvicorn
from fastapi import FastAPI
import config

# 獲取配置文件
settings = config.get_settings()

# 創建關于fastapi的app
def create_app():
    """啟動項目"""

    app = FastAPI(
        title=settings.app.name,
        version=settings.app.version,
    )

    return app


if __name__ == '__main__':
    if settings.app.debug:
        uvicorn.run(app='main:create_app', host=settings.app.host, port=settings.app.port, reload=True, factory=True)
    else:
        uvicorn.run(app='main:create_app', host=settings.app.host, port=settings.app.port, factory=True)

啟動服務:

# 可直接運行
python main.py

# 通過uvicorn
uvicorn main:create_app --factory

可以通過http://localhost:8000/docs查看api文檔。

責任編輯:趙寧寧 來源: 程序員老朱
相關推薦

2025-09-08 11:00:00

2025-09-09 07:00:00

數據庫FastAPI開發

2025-06-03 08:15:00

微服務架構異步任務隊列

2017-07-11 15:26:57

LocalMQ RocketMQ高性能

2023-11-06 08:32:17

FastAPIPython

2021-10-14 09:51:17

架構運維技術

2018-05-08 18:26:49

數據庫MySQL性能

2020-11-10 09:43:32

NginxLinux服務器

2025-05-26 09:25:00

Web 接口開發Redis

2019-09-03 09:41:48

運維架構技術

2025-04-07 05:00:00

2024-11-25 09:10:03

2025-01-13 12:23:51

2011-10-25 13:13:35

HPC高性能計算Platform

2011-10-21 14:20:59

高性能計算HPC虛擬化

2012-04-02 15:29:00

httpvarnish

2022-12-09 08:40:56

高性能內存隊列

2011-04-18 10:16:30

WEB高性能

2017-08-16 11:00:38

TCPIP協議

2025-09-10 07:36:05

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 绥江县| 三明市| 壤塘县| 山阳县| 汝阳县| 洮南市| 云霄县| 巩义市| 河津市| 常德市| 鸡泽县| 百色市| 阳朔县| 三台县| 舞阳县| 陇西县| 河北区| 沙田区| 乐昌市| 滕州市| 南召县| 马尔康县| 黄平县| 图片| 思南县| 福泉市| 岢岚县| 台东县| 卫辉市| 河间市| 临沭县| 门源| 遂溪县| 荔波县| 寿宁县| 逊克县| 郁南县| 嘉善县| 长治县| 江山市| 军事|