| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #!/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()
|