#!/usr/bin/env python3 import os import subprocess def main(): """ 启动 FastAPI 应用,根据环境选择不同参数: - DEV: 热重载,单进程,仅监听 app 目录 - PROD: 多进程,高性能 uvloop + httptools """ os.environ.setdefault( "WATCHFILES_IGNORE", "**/.git/**,**/venv/**,**/__pycache__/**" ) env = os.getenv("ENV", "DEV").upper() env = "DEV" host = "0.0.0.0" port = "8888" app_module = "app.main:app" base_cmd = [ "uvicorn", app_module, "--host", host, "--port", port, ] if env == "DEV": print("🚀 启动开发环境(热重载)") base_cmd += [ "--reload", "--workers", "1", # ⭐ 关键:限制监听范围 "--reload-dir", "app", "--reload-exclude", ".git", "--reload-exclude", "venv", "--reload-exclude", "__pycache__", ] elif env == "PROD": print("🔥 启动生产环境(多进程 + 高性能)") base_cmd += [ "--workers", str(os.cpu_count() or 1), "--loop", "uvloop", "--http", "httptools", ] else: print(f"⚠️ 未知环境 {env},使用默认 DEV 配置") base_cmd += [ "--reload", "--workers", "1", "--reload-dir", "app", ] print("\n执行命令:") print(" ", " ".join(base_cmd)) print(f"\nSwagger UI: http://{host}:{port}/docs") print(f"ReDoc UI: http://{host}:{port}/redoc\n") subprocess.run(base_cmd) if __name__ == "__main__": main()