financial_system/main.py
2026-06-18 13:21:20 +08:00

33 lines
1.0 KiB
Python

import socket
import uvicorn
from financial_system.core.logger import AppLogger
from financial_system.core.settings import get_settings
logger = AppLogger.get_logger(__name__)
def resolve_port(preferred_port: int, fallback_port: int) -> int:
"""优先使用配置文件端口;被占用时自动切到备用端口。"""
return preferred_port if is_port_available(preferred_port) else fallback_port
def is_port_available(port: int) -> bool:
"""用一次本地 TCP 探测判断端口是否可绑定。"""
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
return sock.connect_ex(("127.0.0.1", port)) != 0
if __name__ == "__main__":
settings = get_settings()
AppLogger.configure(settings)
port = resolve_port(settings.server_port, settings.server_fallback_port)
logger.info("后端服务启动 host=%s port=%s config_path=%s", settings.server_host, port, settings.config_path)
uvicorn.run(
"financial_system.api:app",
host=settings.server_host,
port=port,
reload=False,
)